at
保留中のジョブキューにはいくつかのジョブがあります。
$ atq
28 Wed Oct 31 10:23:00 2018
27 Tue Oct 30 21:20:00 2018
25 Tue Oct 30 21:19:00 2018
26 Tue Oct 30 21:20:00 2018
20 Tue Oct 30 18:25:00 2018
30 Wed Oct 31 10:59:00 2018
32 Wed Oct 31 21:03:00 2018
23 Tue Oct 30 18:28:00 2018
31 Wed Oct 31 13:58:00 2018
19 Tue Oct 30 15:43:00 2018
21 Tue Oct 30 18:27:00 2018
作業番号を取得して削除したい
$ atq | awk '{print $1}'
20
30
32
23
31
19
21
しかし、期待どおりに動作しません。
$ atq | awk '{print $1}'| atrm ; atq
20 Tue Oct 30 18:25:00 2018
30 Wed Oct 31 10:59:00 2018
32 Wed Oct 31 21:03:00 2018
23 Tue Oct 30 18:28:00 2018
31 Wed Oct 31 13:58:00 2018
19 Tue Oct 30 15:43:00 2018
21 Tue Oct 30 18:27:00 2018
コマンドの置き換えでこの問題を解決しました。
$ atrm $(echo "$(atq | awk '{print $1}')")
パイプラインが期待どおりに機能しないのはなぜですかatrm
?
ベストアンサー1
これはあなたの問題に非常に似ています。」指定された日付でキューからジョブを削除する「今を除いて、すべてのジョブを削除しようとしています。
削除するみんなat
キューに保留中のジョブは以下を使用します。
atrm -a
-a
これが有効なオプションではないシステムでは、atrm
以下を使用してください。
atq | awk '{ print $1 }' | xargs atrm
awk
パイプラインの中央にある小さなスクリプトは、at
出力の最初の列(ジョブID)を印刷し、atq
それを引数として使用して実行されますxargs
。atrm
これは次のようなものです。他の質問に対する私の答えprint $1
無条件に施行されるという点だけを除いて。
理由
atq | awk '{ print $1 }' | atrm
うまくいかないのは、atrm
ジョブIDを標準入力から読み取らないからです。コマンドラインにIDが必要です。
「修正」は、2つのネストされたコマンド置換を使用することです。
atrm $( echo "$( atq | awk '{ print $1 }' )" )
これは、単一のコマンド置換を使用することで削減できます(echo $(...)
この場合、置換でコマンドを実行するのと同じ、何もありませんecho
)。
atrm $( atq | awk '{ print $1 }' )