||後ろに2つのコマンドを入力してください。

||後ろに2つのコマンドを入力してください。

利用可能なコマンドがあるかどうかを確認したかったです。そうでない場合は、エラーメッセージを印刷して終了したいと思います。

変数を確認せずにこれを実行したいと思います。なぜなら、変数はスクリプトの小さなポイントであり、複数の行にわたって広がることを望まないからです。

私が使用したい外観は基本的に次のとおりです。

rsync --help >> /dev/null 2>&1 || printf "%s\n" "rsync not found, exiting."; exit 1

残念ながら、exit 1結果に関係なくrsyncが実行されます。

BashでこのPerlタイプのダイメッセージを使用する方法はありますか?

ベストアンサー1

質問に直接答えるには、次のようにコマンドをグループ化します。

rsync --help >> /dev/null 2>&1 || { printf "%s\n" "rsync not found, exiting."; exit 1; }

あなたがしたいことを別の方法でするように提案として:

#!/usr/bin/env bash
for c in rsync ls doesnotexist othercommand grep
do
  if ! type "$c" &> /dev/null
  then 
    printf "$c not found, exiting\n"
    exit 1
  fi
done

dieシェルでPerlをエミュレートするには:

function die {
  printf "%s\n" "$@" >&2
  exit 1
}

# ...
if ! type "$c" &> /dev/null
then
  die "$c not found, exiting"
fi
# ...

おすすめ記事