web-dev-qa-db-ja.com

「at」コマンドにスクリプトへのパスではなく文字列コマンドを渡し、スクリプトをすぐに実行させます

atコマンドを使用して、将来スクリプトを1回実行できます。

at now + 1 minutes -f ~/script.sh

または文字列コマンドnowを実行して、将来の結果を返します。

echo "xyz" >> ~/testtest.txt | at now + 1 minute

代わりに、現在ではなく(例1のように)将来実行される文字列コマンド(例2のように)を渡すにはどうすればよいですか?例えば。

at now + 1 minutes -SOMEFLAG 'echo "xyz" >> ~/testtest.txt'

ありがとう

3
Carl Sega

コマンドを単一引用符で囲み、そのままatに渡すことができます。

echo 'echo "xyz" >> ~/testtest.txt' | at now + 1 minutes

または、bashまたは プロセス置換 をサポートする別のスクリプトを使用している場合は、次のようにできます。

at now + 1 minutes < <(echo 'echo "xyz" >> ~/testtest.txt')

これは基本的に、コマンドでファイルを渡すのと同じように、atにファイル名を渡します。

ただし、ヒアドキュメントを Kusalanandaの提案 として使用すると、シェルのサポートするプロセス置換に依存しないため、移植性が向上します。

2
terdon

ヒアドキュメントを使用して、後でコマンドラインで実行するスクリプトを渡します。

at now + 1 minute <<'END_AT'
echo 'xyz' >> ~/testtest.txt
END_AT

Here-documentが引用され(<<'END_AT'ではなく<<END_ATを使用して)、現在のシェルがスクリプトテキスト内の変数などを展開しないようにします。ドキュメントは標準入力でatに渡されます。

7
Kusalananda