4

次のスクリプト コードを含む基本的な .sh ファイルがあるとします。

#!/bin/sh
rm -rf "MyFolder"

ディレクトリの削除が成功したかどうかを示すこの実行中のスクリプト ファイルの結果を端末に表示するにはどうすればよいですか?

4

5 に答える 5

1

成功したと言わせる必要はありません。エラー ✖ の場合にのみ何かを言うことができ、沈黙は成功を意味します ✔。

これが Unix の哲学のしくみです。

沈黙のルールは、沈黙は黄金律とも呼ばれ、 Unix 哲学の重要な部分であり、プログラムが驚くべきこと、興味深いこと、有用なことを何も言わないときは、何も言わないでください。これは、行儀の良いプログラムは、ユーザーの注意と集中を価値のあるものとして扱い、可能な限り目立たないようにタスクを実行する必要があることを意味します。つまり、沈黙自体が美徳です。http://www.linfo.org/rule_of_silence.html

それはrm自分自身が振る舞う方法です。

于 2020-02-21T14:07:49.157 に答える
0

質問のタイトルで示唆されているように、一般的なケースについて質問している場合は、でスクリプトを実行して、スクリプトが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いくつかの診断が標準エラーに出力されます。

于 2012-12-23T21:55:00.983 に答える
-1
rm -rf "My Folder" && echo "Done" || echo "Error!"

一連のパイプラインの作成について詳しくは、bash のマニュアルを参照してください。

于 2012-12-23T20:28:54.320 に答える
-2

bash(および他の同様のシェル)では、?環境変数は最後に実行されたコマンドの終了コードを提供します。だからあなたはすることができます:

#!/bin/sh
rm -rf "My Folder"
echo $?

アップデート

コマンドが実行されたrm後、ディレクトリが存在しない場合(コマンドが正常に削除されたため、またはコマンドの実行時に存在しなかったため)、スクリプトは0を出力します。ディレクトリが存在する場合(つまり、コマンドが存在する場合)削除できませんでした)、スクリプトは0以外の終了コードを出力します。質問を正しく理解していれば、これはまさに要求された動作です。そうでない場合は、訂正してください。

于 2012-12-23T20:41:56.607 に答える
-3

以前の回答は間違って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
于 2012-12-23T20:54:16.110 に答える