1

私はこの答えを求めてインターネットをトロールしましたが、残念ながらそれを見つけることができませんでした。

PHPでは、ifブロック内でコマンドを実行できます。

if(command(blah)) {} else {}

各関数はtrue/falseyの値を返すため。シェルスクリプトでも同じことができますか?コマンドが正しく実行されたかどうかに基づいて出力をエコーし​​たい。実行するための賞賛は次のとおりです。

find . -type d -exec sudo chmod -R 775 {} \\;

正常に実行されたか失敗したかを出力してから、別のコマンドに進みます。

コマンドを変数などで実行できますか?

4

2 に答える 2

4

シェルコマンドは通常、成功または失敗を示す終了コードを返し、成功を0示し、その他は何らかのエラーを示します(詳細は実行しているコマンドによって異なります)。

この終了コードは、ifステートメントでテストできます。

if my_command; then
  echo It worked.
fi

||また、 and&&演算子を使用してコマンドを連鎖させることもできます。

my_command && echo It worked.
my_command || echo It failed.

コマンドを使用した特定の例findは少し注意が必要です。コマンドは失敗するchmod可能性がありますが、findコマンドは「正常に」完了します。このようなものが役立つかもしれません:

find . -type d -exec sudo sh -c 'chmod -R 775 {} || echo "FAILED {}"' \;

これは印刷されます...

FAILED ./path/to/directory

...どこでも失敗するので、出力を確認できます。しかし、それが絶対に必要かどうかはわかりません。コマンドが失敗する状況はいくつかあります。たとえば、読み取り専用ファイルシステム、または場合によってはNFSマウントです。

于 2012-08-13T15:31:07.047 に答える
0

私の見解は次のとおりです。

find . -type d|while read directory
do
  chmod -R 755 ${directory}
  if [ $? = 0 ];then
     echo "successfully changed ${directory}
  else
     echo "Did not change ${directory}
  fi
done

これにより、分割されて読みやすくなり、各コマンドをテストできます。$?成功(0)または失敗(1以上)で埋められる変数です

于 2012-08-13T18:18:00.163 に答える