[解決済み] IFステートメントを使用しているときに、シェルコマンドを複数行に分割するにはどうすればよいですか?
2022-03-22 14:11:10
質問
シェルでコマンドを複数行に分割するにはどうすればよいですか。
if
ステートメントを使用できますか?
これは有効です。
if ! fab --fabfile=.deploy/fabfile.py --forward-agent --disable-known-hosts deploy:$target; then rc=1
fi
これはうまくいきません。
# does not work:
if ! fab --fabfile=.deploy/fabfile.py \
--forward-agent \
--disable-known-hosts deploy:$target; then
rc=1
fi
コマンド全体が実行されるのではなく、私が取得します。
./script.sh: line 73: --forward-agent: command not found
さらに重要なのは、今回の件と同様の問題を今後理解するために、私のBashに対する理解で足りないものは何かということです。
どのように解決するのですか?
バックスラッシュの後、改行の前に空白文字(スペースまたはタブ文字¹)がある場合、改行が失敗します。そのような空白文字がない場合、あなたの例は正常に動作します。
$ cat test.sh
if ! fab --fabfile=.deploy/fabfile.py \
--forward-agent \
--disable-known-hosts deploy:$target; then
echo failed
else
echo succeeded
fi
$ alias fab=true; . ./test.sh
succeeded
$ alias fab=false; . ./test.sh
failed
シェルにおける行末のバックスラッシュは、実は特殊なケースではなく、バックスラッシュは直後の文字を引用し、通常受けるべき特別な扱いを妨げるという一般的なルールの一例です。この場合、次の文字は改行であり、阻止される特別な扱いはコマンドの終了です。通常、引用された文字はコマンドにそのまま含まれますが、バックスラッシュされた改行文字は完全に削除されます。しかし、それ以外の仕組みは同じです。最も重要なことは、バックスラッシュは直後の文字を引用するだけで、その文字がスペースやタブであれば、文字通りのスペースやタブを取得するだけで、バックスラッシュはその後の改行には何の影響も及ぼさないことです。
Czechnology が指摘するように、¹ やキャリッジリターンも同様です。POSIX シェルは、WSL でさえも Windows フォーマットのテキストファイルとうまく付き合えません。Cygwinもそうですが、少なくとも彼らのBashポートには
igncr
オプションで
set -o
を使えば、キャリッジリターンに耐えられるようになります。
関連
-
[解決済み] twigで文字列を連結する方法
-
[解決済み] にはどんな意味があるんだろう?
-
[解決済み] YAML の文字列を複数行に渡って分割するには?
-
[解決済み] シェルスクリプトでブール変数を宣言して使用するにはどうすればよいですか?
-
[解決済み】各「when」ブロックに複数の値を指定するCaseステートメント
-
[解決済み】「sh」や「bash」コマンドを使わずにシェルスクリプトを実行するにはどうしたらいいですか?
-
[解決済み】PowerShellで"&&"や"-and "を動作させることはできますか?
-
[解決済み】シェルスクリプトでファイル名の拡張子を削除するには?
-
[解決済み] Kotlin 2次コンストラクタ
-
[解決済み] シェルでドル記号と括弧の中にコマンドを入れるとはどういう意味か: $(command)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] どなたか説明してください - for (int i = 0; i < 8; i++) [closed].
-
[解決済み] twigで文字列を連結する方法
-
[解決済み] はOCamlの構文糖でbegin.endですか?
-
[解決済み] Go golang、シンタックスエラー: unexpected ++, expecting :
-
[解決済み] にはどんな意味があるんだろう?
-
[解決済み] PowerShellで"@"マークは何をするのですか?
-
[解決済み] OCamlにおける`and`キーワードの意味とは?
-
[解決済み] 文の前の感嘆符(!)は何を意味するのですか?重複
-
[解決済み] Markdownのコメント
-
[解決済み】PowerShellで"&&"や"-and "を動作させることはできますか?