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 在一天之交向自己发送 ($$) 信号。

相关内容