同じスクリプト上bashでcmd同じスクリプトで異なるコマンドを実行する方法はいくつかあります。
cmd:;他の回答で述べたように、で始まる行は無視されます。文字が改行をエスケープし、次の行がによってコメントとして扱われるため、現在の行がコマンドrem ^で終了する場合も、次の行は無視^されremます。
行をbash無視させるcmdには、いくつかの方法があります。cmdコマンドを壊すことなくそれを行ういくつかの方法を列挙しました :
存在しない#コマンド(非推奨)
スクリプトの実行時に#使用できるコマンドがない場合は、次のようにcmdできます。
# 2>nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
行#の先頭の文字は、その行をコメントとして扱います。cmdbash
#行末の文字は、ブライアントンプセットが回答で指摘したbashように、\r文字をコメント化するために使用されます。これbashがないと、ファイルの\r\n行末にが必要な場合にエラーがスローされcmdます。
を実行することにより、後続のコマンドを実行しながら、存在しないコマンドのエラーを無視するように# 2>nul仕向けcmdて#います。
で使用#できるコマンドがあるPATH場合、またはで使用できるコマンドを制御できない場合は、このソリューションを使用しないでくださいcmd。
を使用echoして#文字を無視するcmd
我々は使用することができecho、出力を挿入するようにリダイレクトされ、それのとcmdでコマンドをbashさん、コメントアウトエリア:
echo >/dev/null # >nul & echo Hello cmd! & rem ^
echo 'Hello bash!' #
その#文字はで特別な意味を持たないため、cmdへのテキストの一部として扱われますecho。echoコマンドの出力をリダイレクトし、その後に他のコマンドを挿入するだけで済みました。
空の#.batファイル
echo >/dev/null # 1>nul 2> #.bat
# & echo Hello cmd! & del #.bat & rem ^
echo 'Hello bash!' #
このecho >/dev/null # 1>nul 2> #.bat行は、#.batオンの間は空のファイルを作成しcmd(または、存在する#.bat場合は既存のを置き換え)、オンの間は何もしませんbash。
このファイルcmdは、に他の#コマンドがある場合でも、後続の行で使用されますPATH。
-specificコードのdel #.batコマンドは、cmd作成されたファイルを削除します。これは最後のcmd行で行うだけです。
#.batファイルが現在の作業ディレクトリにある可能性がある場合は、このソリューションを使用しないでください。そのファイルは消去されます。
推奨:ヒアドキュメントを使用してcmdコマンドを無視するbash
:; echo 'Hello bash!';<<:
echo Hello cmd! & ^
:
^行末に文字を配置することにより、cmd改行をエスケープ:し、ヒアドキュメントの区切り文字として使用することで、区切り文字の行の内容はに影響しませんcmd。この方法でcmdは、:行が終了した後にのみその行を実行し、と同じ動作をしbashます。
両方のプラットフォームで複数の行を使用し、それらをブロックの最後でのみ実行する場合は、次のようにします。
:;( #
:; echo 'Hello' #
:; echo 'bash!' #
:; );<<'here-document delimiter'
(
echo Hello
echo cmd!
) & rem ^
here-document delimiter
cmdと正確here-document delimiterに一致する行がない限り、このソリューションは機能します。here-document delimiter他のテキストに変更できます。
提示されたすべてのソリューションでは、コマンドは最後の行の後でのみ実行され、両方のプラットフォームで同じことを実行した場合の動作に一貫性があります。
これらのソリューションは\r\n、改行としてファイルに保存する必要がありますcmd。そうしないと、機能しません。