2

スクリプトの出力 (at コマンドを使用してスケジュール) をテキスト ファイルにリダイレクトしようとしています。

at -f shelltest.sh -v 11:33 > data.txt

スクリプトが正常に実行されていても、出力は出力テキスト ファイル (data.txt) に保存されません。

スクリプトが「adb デバイス」をチェックしてから再起動を実行することを要求するとします。at コマンドを使用してスクリプトをスケジュールすると、コマンド プロンプトが表示されず、スクリプトの出力がテキスト ファイルに保存されません。

スクリプトの出力をテキスト ファイルに保存する方法。

注:
テキスト ファイルには読み取り/書き込み権限があります。

4

2 に答える 2

2

シェルは、ユーザーが要求していることを正確に実行しています。つまり、atコマンドを実行し、その出力をファイルにリダイレクトしています。したがって、スケジュールしたジョブの出力がそこで終わることを望んでいる (または期待している) かもしれませんatが、それはあなたが言っていることではありません。あなたは、「スケジューリング操作の出力をこのファイルにリダイレクトしてください」と言っています。

回避策はやや面倒ですが、上記を考えると、うまくいけば意味があるはずです。

at -v 11:33 <<'HERE'
shelltest.sh >data.txt
HERE

Bash を使用している場合は、here 文字列も使用できます。

at -v 11:33 <<<'shelltest.sh >data.txt'

echoまたは、またはを使用できますprintf

printf '%s\n' 'shelltest.sh >data.txt' | at -v 11:33
于 2014-11-07T08:06:44.140 に答える
1

試す:

echo 'shelltest.sh > data.txt' | at -v 11:33

ノート

シェルがこのコマンドをどのように解釈するかを検討してください。

at -f shelltest.sh -v 11:33 > data.txt
  • シェルは、、、、およびのat4 つの引数を持つコマンドを認識します。シェルは、これらの引数の意味を気にしません。シェルは単にそれらを に渡します。 -fshelltest.sh-v11:33at

  • シェルは> data.txt、 の出力をatに送信する必要があることを意味すると解釈しdata.txtます。このリダイレクトは、shelltest.sh最終的に実行されるときに何が起こるかに影響しません。

于 2014-11-07T08:01:14.323 に答える