chmod +サイレントモード+エラーにもかかわらず終了コード0を強制する方法


37

chmodを実行し、コマンドからのエラーを無視することは可能ですか

例(file.txtは例を示すために存在しないことに注意してください)

入力するとき

chmod 777 file.txt

出力でエラーが発生します

  chmod: cannot access file.txt : no such file or directory

そこで、次のようにコマンドに-fフラグを追加します(大文字と小文字を示すためにfile.txtは存在しません)

  chmod -f 777 file.txt
  echo $?
  1

しかし、例からchmodは1を返します

エラーにもかかわらずchmodコマンドに強制終了コード0を与える方法をアドバイスしてください


なぜそれは賛成ですか?不要な出力を抑制し、スクリプト2>/dev/nullで使用set -eします。
ott--

回答:


47

エラーにもかかわらずchmodコマンドに強制終了コード0を与える方法をアドバイスしてください

chmod -f 777 file.txt || :

これは:chmod失敗するとnullコマンドなどを実行します。nullコマンドは何もしないので常に成功するため、終了コード0が表示されます。


25
等価が、カジュアルなユーザーのためのより読み使用することですchmod -f 777 file.txt || true
オリオン

2
@orion依存。慣れ親しんでいる場合は、:同じように読みやすいようです。
devnull

2
しかし、初心者が読むことができるより読みやすいコードを書く場合、どのように仕事を続けますか?
ニックT

1
ここでシェフ開発者は、私が持っている同じ問題に遭遇した他の人を助けるためにいくつかのキーワードをドロップします。shell_out!(cmd + '|| true')は、インストールでべき等であり、shell_out!を無視する必要がある場合の命の恩人です。コンパイルエラー。
ジャックチャンス

54

chmod -f 777 file.txt || true

ORであるため、ステートメントの1つがtrueを返す場合、returnはtrueです。これにより、終了ステータスがゼロになります。


3
読みやすいコードを書く練習を促進するための代替手段として、この回答を追加しました。
ジェリー

2
の右ブランチは、成功した||場合chmodは実行されません...ここで計算上の違いが大きくなるわけではありません。
dhag

有難うございます。私はそれを台無しにしたとは信じられない。:)修正で編集されました。
ジェリー

5

私はいつも愛していました

 chmod -f 777 file.txt || exit 0

3
これにより、chmodが失敗したときにスクリプトが停止します。問題は、問題が発生したときにスクリプトを実行し続けることでした(エラーを無視)。
ベダ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.