GNU/Linux >> Linux の 問題 >  >> Linux

エラー時に空のファイルを取得せずに、コマンドをファイルに出力するにはどうすればよいですか?

コマンドが失敗した場合、実行後にファイルを削除できます。

myAPICommand parameters > myFile.txt || rm myFile.txt

ただし、代わりにファイルを上書きすることをお勧めします:

myAPICommand parameters >| myFile.txt

シェルの制御およびリダイレクト演算子とは何ですか? を参照してください。詳細はこちら


「noclobber」を設定する必要があります。次の例を確認してください:

$ echo 1 > 1  # create file
$ cat 1
1
$ echo 2 > 1  # overwrite file
$ cat 1
2
$ set -o noclobber
$ echo 3 > 1  # file is now protected from accidental overwrite
bash: 1: cannot overwrite existing file
$ cat 1
2
$ echo 3 >| 1  # temporary allow overwrite
$ cat 1
3
$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ cat 1
3
$ set +o noclobber
$ echo 4 > 1
$ cat 1
4

「noclobber」は上書き専用ですが、追加することもできます:

$ echo 4 > 1
bash: 1: cannot overwrite existing file
$ echo 4 >> 1

そのフラグが設定されているかどうかを確認するには、 echo $- と入力します C があるかどうかを確認します フラグセット (または set -o |grep clobber ).

Q:base コマンドが失敗したときに空のファイルを書き込まないようにするにはどうすればよいですか?

要件はありますか?出力を変数に格納し、それが空かどうかを確認するだけです。次の例を確認してください (変数を確認する方法は、必要に応じて微調整する必要があることに注意してください。この例では、引用したり ${cmd_output+x} のようなものを使用したりしませんでした これは、変数が設定されているかどうかをチェックして、空白のみを含むファイルの書き込みを回避します。

$ cmd_output=$(echo)
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e '\n\n\n')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e ' ')
$ test $cmd_output && echo yes || echo no
no
$ cmd_output=$(echo -e 'something')
$ test $cmd_output && echo yes || echo no
yes

$ cmd_output=$(myAPICommand.exe parameters)
$ test $cmd_output && echo "$cmd_output" > myFile.txt

出力全体を保持する単一の変数を使用しない例:

log() { while read data; do echo "$data" >> myFile.txt; done; }
myAPICommand.exe parameters |log

myAPICommand.exe を実行するスクリプトを作成できますが、最初に myFile.txt が存在する場合はそれを削除します。そうすれば、常に rm コマンドを実行してクリーンアップする必要はありません。

いいね:

if [ -e myFile.txt ]
then
    rm myFile.txt && myAPICommand.exe
else

コマンドがそれ自体の後にクリーンアップされるようにすることもできます。ファイルが空の場合は、次のようなものを追加します。

いいね:

if [ -s myFile.txt ]
then
        EXIT 0
else
        rm myFile.txt && EXIT 1
fi

Linux
  1. Unix のトップ コマンド出力を読み取り可能な形式でファイルにキャプチャする方法

  2. Linuxでファイルをシンボリックリンクするにはどうすればよいですか?

  3. time コマンドの出力を Linux のファイルにリダイレクトする方法は?

  1. Linuxでコマンド出力をファイルに保存する方法

  2. シェルコマンドの出力をループするにはどうすればよいですか?

  3. Linuxコマンド出力をファイルに出力するには?

  1. Linuxでの入出力とエラーリダイレクトの操作

  2. ファイル拡張子をクリーンアップする方法は?

  3. ファイルの存在を確認し、存在しない場合はコマンドを実行するにはどうすればよいですか?