bash는 tcsh "sched" 명령을 사용하는 것과 동일합니까?

bash는 tcsh "sched" 명령을 사용하는 것과 동일합니까?

tcsh에서 내장 sched명령은 현재 쉘이 지정된 시간에 명령을 실행하도록 합니다.

다음 파일이 있습니다 $HOME/.sched(간소화된 버전임).

setenv today `date +%F`
sched +00:01 sched 00:00 source $HOME/.sched

source $HOME/.sched그럼 내 마음대로 해 $HOME/.cshrc.

$today예를 들어 환경 변수를 로 설정하고 "2012-06-25"매일 밤 자정에 현재 날짜로 자동 업데이트합니다. 작업은 실행될 때마다 자동으로 일정이 다시 조정됩니다.

date명령은 하루에 한 번, 필요할 때만 호출됩니다.

Bash에서 이 작업을 수행할 수 있는 방법이 있나요? 이 at명령은 아무런 효과가 없습니다. 외부에서 명령을 호출하고 현재 쉘의 환경에 영향을 주지 않습니다.

$(date +%F)( type 대신 입력할 수 있다는 것은 알지만 $today, 대화형으로 사용하기 때문에 추가로 입력하는 것이 큰 부담이 됩니다.)

tcsh에는 특정 상황에서 자동으로 실행되는 여러 특수 별칭도 있습니다.

이것경고음 명령,CWD 명령,주기적,사전 명령,포스트 명령, 그리고작업 명령 특별한 별칭쉘이 벨을 울릴 때와 작업 디렉터리가 변경될 때 실행될 명령을 별도로 설정할 수 있습니다. 기간각 프롬프트 전, 각 명령 실행 전, 각 명령 실행 후, 작업이 시작되거나 포그라운드로 나타날 때.

bash에도 비슷한 것이 있습니까?

답변1

시도해 보셨나요 $PROMPT_COMMAND? 예를 들어, CWD를 표시하기 위해 xterm 헤더를 설정하는 데 일반적으로 사용됩니다. 메시지가 표시되면 실행합니다. 변수를 설정하는 데 사용할 수도 있습니다. 첫 번째 단점은 셸에서 Enter 키를 누를 때마다 명령이 실행된다는 것입니다. 두 번째는 단말기에 오랫동안 아무런 활동이 없고 하루가 지나면 자동으로 설정되지 않는다는 점입니다. 다음에 터미널에 입력할 때 설정됩니다.

# export PROMPT_COMMAND="export today=\`date\`"
# echo $today
Tue Jun 26 01:07:19 EEST 2012
# echo $today
Tue Jun 26 01:07:21 EEST 2012
# echo $today
Tue Jun 26 01:07:22 EEST 2012

답변2

백틱 두 개를 1달러로 거래하려는 경우:

alias today='date +%F'
echo `today`

변수에 날짜를 원하면업데이트하세요PROMPT_COMMAND이것이 내가 생각할 수 있는 유일한 방법이다. 내장 변수를 사용하면 모든 프롬프트에서 프로세스가 분기되는 것을 방지할 수 있습니다 SECONDS.

update_today () {
  if ((SECONDS/86400 > __last_today_update)); then
    ((__last_today_update = SECONDS/86400))
    today=$(date +%F)
  fi
}
PROMPT_COMMAND="update_today; $PROMPT_COMMAND"

또 다른 방법은 키 바인딩을 통해 텍스트를 삽입하는 것입니다.

rl_insert () {
  READLINE_LINE=${READLINE_LINE:0:$READLINE_POINT}$1${READLINE_LINE:$READLINE_POINT}
  ((READLINE_POINT+=${#1}))
}
bind -x '"\C-xt":rl_insert "$(date +%F)"'

답변3

당신이 찾고 있는 것 같습니다 at:

~$ 지금 + 1분
경고: 명령은 /bin/sh를 사용하여 실행됩니다.
> 에코 "테스트" |
에서>
욥 2 2012년 6월 25일 월요일 17:51:00

user@host의 브로드캐스트 메시지                                              
        (어딘가) 17:51…                                               

시험                                                                           

그러나 나는 귀하의 질문을 다시 읽었으며 귀하는 스스로 재정렬할 무언가를 찾고 있습니다. 이는 쉘 스크립트를 호출 하여 at필요한 작업을 수행한 다음 새 작업을 설정함으로써 at쉽게 수행됩니다 . 그러나 at호출하는 쉘과 달리 자체 하위 쉘에서 실행됩니다.

답변4

이를 통해 해결책에 대한 아이디어를 얻을 수 있습니다.

$ trap 'today=$(date)' 10
$ echo $today
$ sleep 8
$ kill -10 $$
$ echo $today

이제 at을 사용하여 하루가 바뀔 때 자신에게 ($$) 신호를 보낼 수 있습니다.

관련 정보