백그라운드 스크립트를 통해 주기적으로 PS1을 변경할 수 있습니까?

백그라운드 스크립트를 통해 주기적으로 PS1을 변경할 수 있습니까?

방금 PS1 변수를 발견했습니다. 프롬프트를 변경하려면 이 변수 ​​값을 변경하기만 하면 됩니다. 예를 들면 다음과 같습니다.

PS1="\h"
hostname as Prompt
PS1="\j"
numbers of current jobs as Prompt
PS1="\t"
current time as Prompt
PS!="\j running on \h :"
or more complex string with many substitutions

이제 쉘을 차지하지 않는 백그라운드 프로세스 같은 것이 있기 때문에 PS1의 값을 5초마다 변경하고 전체 시간 동안 백그라운드에서 실행될 수 있는 스크립트를 작성할 수 있는지 궁금합니다.

의사 스크립트:

Repeat

    {
    PS1="\j jobs"
    sleep 5 seconds
    PS1="time: \t"
    sleep 5 seconds
    PS1="Command History: \!"
    sleep 5 seconds
    }

가능하다면 bash 쉘 스크립트에서 어떻게 구현하시겠습니까?

답변1

위의 의사 코드를 쉘 스크립트에 통합하더라도 이것이 가능하다고 생각하지 않습니다. 왜냐하면 쉘 스크립트가 호출될 때마다 원하는 위치가 아닌 이러한 일이 발생하는 자체 하위 쉘을 시작하기 때문입니다. (메인 쉘)로 이동합니다. 백그라운드에서 시작하더라도 마찬가지입니다. (스크립트.sh&)

답변2

일반적인 UNIX 셸(bash, [pd]ksh, [t]csh)에는 자동화된 백그라운드 작업을 원하는 대로 수행하기 위한 자체 cron 내부 아날로그가 없습니다.

그러나 그랬더라도 명령을 실행하고 프롬프트로 돌아온 후에 프롬프트를 표시하는 문자 출력은 동적이 아니라 정적입니다. 거기 앉아서 시청하고 있다면 생각하는 것처럼 5초마다 PS1 옵션을 순환하지 않습니다. Enter를 누르거나 다른 명령을 실행할 때까지 새 프롬프트가 표시되지 않습니다.

그러나 "작업 표시줄" 기능이 있는 GNU Screen을 사용하면 원하는 것을 얻을 수 있습니다. 부터 시작해 보세요이것.

관련 정보