2017-05-01 7 views
0

Ubuntu 16.04にCouchDB 2.0をインストールするためにgithubで見つけたsimple shell scriptがあります。これは、これらの行がありますset -eを使用してスクリプトでOR TRUE演算子を使用する理由は何ですか?

#!/bin/sh 
... 
sudo apt-get update || true 
... 

|| pipeコンポーネントが何をしているのか?私。何がtrueにパイプされているのですか?私の知る限りでは、サーバー上で実行すると、パイプなしでapt-get updateコマンドを実行するのと同じ結果になります。

私は更新したい場合は以前、/私はどうなるのパッケージをインストールします。

sudo apt-get update 
sudo apt-get upgrade 

は、アップグレードコマンドが実行さにtrue結果に配管していますか?また、シェル/ bashスクリプト内のすべてが同期して実行されると仮定できますか?

+3

これはパイプではなく、論理的です。つまり、最初のコマンドに終了ステータス0(成功)がない場合は、2番目のコマンドを実行します。これにより、この行の終了ステータスは常に0になります。 '-e'シェルオプションは設定されていますか?この種のものは、しばしば見られます。 (編集:ちょうどチェックされて、 'set -e' *が*設定されています) –

+0

は、私が恐ろしくオフであったので、タイトルを変更しました。 –

答えて

3

||はパイプ演算子ではありません。これはシェル演算子で、 "or"を意味します。前述のコマンドが失敗した場合にのみ、次のコマンドを実行します。 trueは常に成功し、それ以外は何もしないので、|| trueの唯一の点は複合コマンドが確実に成功することです。

通常はこれは不要ですが、シェルをset -eで終端故障モードにすることができます。その場合、失敗したスクリプトコマンドは、スクリプトをただちに終了させます。 (これは、すべてのコマンドのステータスを確認する必要がないようにするために行われることがありますが、一般的にベストプラクティスとして推奨されていません)。apt-get updateなどのコマンドの失敗を無視することが望ましい場合があります。 );そのようなコマンドに||trueを追加すると、成功を保証し、更新が失敗した場合でもスクリプトを続行できるようになります。

+0

ありがとうございます。私はそれをパイプではなく「OR」として見ていたはずです –

関連する問題