次のスクリプト コードを含む基本的な .sh ファイルがあるとします。
#!/bin/sh
rm -rf "MyFolder"
ディレクトリの削除が成功したかどうかを示すこの実行中のスクリプト ファイルの結果を端末に表示するにはどうすればよいですか?
次のスクリプト コードを含む基本的な .sh ファイルがあるとします。
#!/bin/sh
rm -rf "MyFolder"
ディレクトリの削除が成功したかどうかを示すこの実行中のスクリプト ファイルの結果を端末に表示するにはどうすればよいですか?
成功したと言わせる必要はありません。エラー ✖ の場合にのみ何かを言うことができ、沈黙は成功を意味します ✔。
これが Unix の哲学のしくみです。
沈黙のルールは、沈黙は黄金律とも呼ばれ、 Unix 哲学の重要な部分であり、プログラムが驚くべきこと、興味深いこと、有用なことを何も言わないときは、何も言わないでください。これは、行儀の良いプログラムは、ユーザーの注意と集中を価値のあるものとして扱い、可能な限り目立たないようにタスクを実行する必要があることを意味します。つまり、沈黙自体が美徳です。http://www.linfo.org/rule_of_silence.html
それはrm
自分自身が振る舞う方法です。
質問のタイトルで示唆されているように、一般的なケースについて質問している場合は、でスクリプトを実行して、スクリプトがsh -x scriptname
何をしているのかを確認できます。また、診断出力をスクリプト自体に書き込み、オプションで制御することもよくあります。
#!/bin/sh
verbose=false
case $1 in -v | --verbose )
verbose=true
shift ;;
esac
say () {
$verbose || return
echo "$0: $@" >&2
}
say "Removing $dir ..."
rm -rf "$dir" || say "Failed."
このスクリプトをオプションなしで実行すると、正常に動作するUnixユーティリティのように、サイレントに実行されます。オプションを指定して実行すると、-v
いくつかの診断が標準エラーに出力されます。
rm -rf "My Folder" && echo "Done" || echo "Error!"
一連のパイプラインの作成について詳しくは、bash のマニュアルを参照してください。
bash(および他の同様のシェル)では、?
環境変数は最後に実行されたコマンドの終了コードを提供します。だからあなたはすることができます:
#!/bin/sh
rm -rf "My Folder"
echo $?
アップデート
コマンドが実行されたrm
後、ディレクトリが存在しない場合(コマンドが正常に削除されたため、またはコマンドの実行時に存在しなかったため)、スクリプトは0を出力します。ディレクトリが存在する場合(つまり、コマンドが存在する場合)削除できませんでした)、スクリプトは0以外の終了コードを出力します。質問を正しく理解していれば、これはまさに要求された動作です。そうでない場合は、訂正してください。
以前の回答は間違ってrm
いました。ディレクトリが存在しない場合、エラー コード > 0 で終了しないでください。
代わりに、次を使用することをお勧めします。
dir='/path/to/dir'
if [[ -d $dir ]]; then
rm -rf "$dir"
fi
rm
ステータスを返したい場合は、-f
フラグを削除してください。
Linux Mint での例 (ディレクトリが存在しません):
$ rm -rf /tmp/sdfghjklm
$ echo $?
0
$ rm -r /tmp/sdfghjklm
$ echo $?
1