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コマンドは1日1回、必要なときにのみ呼び出されます。

Bashでこれを行う方法はありますか?このatコマンドは何の効果もありません。外部からコマンドを呼び出し、現在のシェルの環境には影響しません。

$(date +%F)(typeの代わりに入力できるということはわかりますが$today、対話型で使用するので追加で入力することが大きな負担になります。)

tcshには、特定の状況で自動的に実行されるいくつかの特別なエイリアスもあります。

これビープ音コマンドCWDコマンド定期的辞書コマンドポストコマンド作業コマンド 特別なエイリアスシェルがベルを鳴らすときと、作業ディレクトリが変更されたときに実行されるコマンドを別々に設定できます。 期間各プロンプトの前、各コマンドの実行前、各コマンドの実行後、ジョブの開始時またはフォアグラウンドで表示されます。

bashにも似ていますか?

答え1

試してみました$PROMPT_COMMANDか?たとえば、CWD を表示するために xterm ヘッダーを設定するために通常使用されます。メッセージが表示されたら実行します。変数の設定にも使用できます。最初の欠点は、シェルでEnterキーを押すたびにコマンドが実行されることです。 2つ目は、端末に長い間何の活動もなく、一日が経過すると自動的に設定されないことです。次回端末に入力するときに設定されます。

# 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

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を使って、一日が変わったときに自分に($$)シグナルを送ることができます。

関連情報