bash相當於使用tcsh“sched”指令?

bash相當於使用tcsh“sched”指令?

在 tcsh 中,內建sched指令會導致目前 shell 在指定時間執行指令。

我有以下$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命令將不起作用;它從外部呼叫命令,並且不會影響目前 shell 的環境。

(我知道我可以輸入$(date +%F)而不是輸入$today,但由於我交互地使用它,額外的輸入是一個很大的負擔。)

tcsh 還有許多特殊別名,在某些情況下會自動執行:

蜂鳴命令,CWD命令,週期性的,預命令,後命令, 和作業命令 特殊別名可以分別設定當shell想響鈴時執行指令、當工作目錄改變時,每 時段分鐘、每個提示之前、每個命令執行之前、每個命令執行之後以及作業啟動或進入前台時。

bash 有類似的東西嗎?

答案1

你有沒有嘗試過$PROMPT_COMMAND?例如,它通常用於設定 xterm 標題以顯示 CWD。出現提示時執行。也許可以用它來設定你的變數。第一個缺點是每次您在 shell 中按 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

如果您願意用兩個反引號換取一美元:

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> 回顯「測試」|牆
在>
工作 2 於 2012 年 6 月 25 日星期一 17:51:00

來自 user@host 的廣播訊息                                              
        (某處)17:51 ...                                               

測試                                                                           

不過,我剛剛重讀了你的問題,你正在尋找能夠重新自我安排的東西。透過at呼叫一個 shell 腳本來完成它需要做的事情,然後設定一個新的at作業,這很容易做到。但是,at確實在自己的子 shell 中運行;不像您呼叫它的 shell 那樣。

答案4

這可能會給您一個解決方案的想法:

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

現在您可以使用 at 在一天之交向自己發送 ($$) 訊號。

相關內容