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을 사용하여 하루가 바뀔 때 자신에게 ($$) 신호를 보낼 수 있습니다.