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)( 가 아닌 타이핑을 할 수 있는 것으로 알고 있지만 $today이것을 인터랙티브하게 사용하기 때문에 추가 타이핑이 상당한 부담이 됩니다.)

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

그만큼경고음,cwdcmd,주기적,사전 명령,postcmd, 그리고jobcmd 특수 별칭쉘이 벨을 울리려고 할 때, 작업 디렉토리가 변경될 때마다 명령을 실행하도록 각각 설정할 수 있습니다. t기간분, 각 프롬프트 전, 각 명령이 실행되기 전, 각 명령이 실행된 후, 작업이 시작되거나 포그라운드로 전환될 때.

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를 사용하여 실행됩니다.
at> 에코 "테스트" | 벽
에서>
2012년 6월 25일 월요일 17:51:00의 직업 2

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

시험                                                                           

하지만 귀하의 질문을 다시 읽었으며 귀하는 자체 일정이 다시 조정되는 것을 찾고 있습니다. at필요한 작업을 수행하고 새 작업을 설정하는 쉘 스크립트를 호출 하면 매우 쉽습니다 at. 그러나 at자체 하위 쉘에서 실행됩니다. 호출하는 쉘이 아닙니다.

답변4

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

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

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

관련 정보