次のif条件で複数の文を実行したいと思います。
[[ -e cli.tar.gz ]] && `tar -xvf cli.tar.gz -C ~/` ||
echo "cli.tar.gz can not be found. Exiting" >&2 && exit 1
cli.tar.gzを見つけてタールすると、出口1に到達します。
[[ -e cli.tar.gz ]] && tar -xvf cli.tar.gz -C ~/ ||
{ echo "cli.tar.gz can not be found. Exiting" >&2; exit 1; }
関数の末尾にUnexpected token "}"エラーが発生します(この行は関数の一部です)。
フォーマットされたif条件を作成して問題を解決しました。
if [[ -e cli.tar.gz ]]
then
if [[ ! `tar -xvf cli.tar.gz -C ${UDM_REMOTE}` ]]
then
echo "cli.tar.gz can not be found. Exiting" >&2; exit 1;
fi
fi
しかし、最初に達成しようとしていたように、1行にネストされたif条件を実行するソリューションは何ですか?
アップデート1 @uweと@goldilocksの答えのおかげで、以下の説明を更新しました。
[[ ! -e cli.tar.gz ]] && ! `tar -xvf cli.tar.gz -C ~/` && \
echo "cli.tar.gz can not be found (or tar failed). Exiting" >&2 && exit 1
ベストアンサー1
if [[ ! -e cli.tar.gz ]] || ! tar -xvf cli.tar.gz -C ~/ ; then
echo "cli.tar.gz can not be found (or tar failed). Exiting" >&2 && exit 1
fi
または完全に避けたい場合は、次のようにしてくださいif
。
( [[ ! -e cli.tar.gz ]] || ! tar -xvf cli.tar.gz -C ~/ ) && { echo "cli.tar.gz can not be found (or tar failed). Exiting" >&2 ; exit 1 ; }