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