コマンドの結果が空の場合は、代替コマンドを実行します(コマンドの1行から)。

コマンドの結果が空の場合は、代替コマンドを実行します(コマンドの1行から)。

ホストファイルに特定のIPを追加しようとしています。このIPは2つの異なるコマンドを使用して取得できますが、最良のコマンドが常にそれを返すわけではありません。

最初のコマンドを確認し、IPが返された場合はその行をファイルに追加し、それ以外の場合は2番目のコマンドを使用するコマンドを作成しようとしています。

優先順位コマンド:

docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'

代替コマンド:

ifconfig docker | grep -oP 'inet:\K[^ ]+'

他のものならコマンドは-eq ''またはを使用します-ne 0が、それをパラメータとして使用してホストファイルに行を追加しようとすると機能しません。

次のようになります(ただし、シェルコマンドの1行にあります)。

if [ docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+' -ne 0 ] ;
  then sudo echo $(docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+') "symfony.dev" >> /etc/hosts;
  else sudo echo $(ifconfig docker0 | awk '/inet:/{ print substr($2,6); exit }') "symfony.dev" >> /etc/hosts;
fi

ベストアンサー1

if他のコマンドと同様に、ステートメントで収集された出力はリダイレクトまたはパイプ処理できます。

if ! docker network inspect bridge | grep Gateway | grep -o -E '[0-9\.]+'; then
    ifconfig docker | grep -oP 'inet:\K[^ ]+'
fi | sudo tee -a /etc/hosts > /dev/null

root権限が必要な唯一の部分は、書き込み用に開くことである/etc/hostsため、出力リダイレクトをsudo tee

おすすめ記事