WindowsやLinuxでコマンド操作を行っていると、複数のコマンドを1行で続けて(ワンライナーで)実行したいときがあります。
そこでここでは、WindowsのコマンドプロンプトやPowerShell、Linuxのそれぞれで、複数のコマンドを1行で連続実行する方法を紹介します。
目次
Windowsの場合
コマンドプロンプト
Windowsのコマンドプロンプトで複数のコマンドを1行で連続実行するときの記述方法は、次のとおりです。
cmd1に続けてcmd2を実行したいとき:
単純に、複数のコマンドを連続実行したいときは「&」を使用します。以下の場合、cmd1の実行結果にかかわらずcmd2を実行します。
C:\> cmd1 & cmd2
cmd1の標準出力をcmd2の標準入力に渡したいとき:
cmd1の標準出力をcmd2の標準入力に渡したいときは「|」を使用します。
C:\> cmd1 | cmd2
cmd1の実行に成功した場合のみ、cmd2を実行したいとき:
cmd1の実行に成功した場合にのみ、cmd2を実行したいときは「&&」を使用します。
C:\> cmd1 && cmd2
cmd1の実行に失敗した場合のみ、cmd2を実行したいとき:
cmd1の実行に失敗した場合にのみ、cmd2を実行したいときは「||」を使用します。
C:\> cmd1 || cmd2
Windows PowerShell
WindowsのPowerShellで複数のコマンドを1行で連続実行するときの記述方法は、次のとおりです。
cmd1に続けてcmd2を実行したいとき:
単純に、複数のコマンドを連続実行したいときは「;」を使用します。以下の場合、cmd1の実行結果にかかわらずcmd2を実行します。
PS C:\> cmd1 ; cmd2
cmd1の標準出力をcmd2の標準入力に渡したいとき:
cmd1の標準出力をcmd2の標準入力に渡したいときは「|」を使用します。
PS C:\> cmd1 | cmd2
なお、Windows 10や11に標準搭載の「Windows PowerShell」では「&&」や「||」といった論理演算子は使用できませんが、新しいクロスプラットフォーム向けの「PowerShell7」をインストールすれば利用できます。
PowerShell 7.0 の新機能 - PowerShell | Microsoft Docs
Linuxの場合
Linuxで複数のコマンドを1行で連続実行するときの記述方法は、次のとおりです。
cmd1に続けてcmd2を実行したいとき:
単純に、複数のコマンドを連続実行したいときは「;」を使用します。以下の場合、cmd1の実行結果にかかわらずcmd2を実行します。
# cmd1 ; cmd2
cmd1の標準出力をcmd2の標準入力に渡したいとき:
cmd1の標準出力をcmd2の標準入力に渡したいときは「|」を使用します。
# cmd1 | cmd2
cmd1の実行に成功した場合のみ、cmd2を実行したいとき:
cmd1の実行に成功した場合にのみ、cmd2を実行したいときは「&&」を使用します。
# cmd1 && cmd2
cmd1の実行に失敗した場合のみ、cmd2を実行したいとき:
cmd1の実行に失敗した場合にのみ、cmd2を実行したいときは「||」を使用します。
# cmd1 || cmd2
複数のコマンドをひとまとまりとして扱いたいとき:
複数コマンドをひとまとまりにすると、たとえば「(date; pwd; ls) >kekka.log」と実行することで、date、pwd、lsの実行結果をまとめてkekka.logファイルに書き込むといったことができます。
# (cmd1; cmd2; cmd3) >testfile.log
なお、()を使った場合新しいシェル上でコマンドが実行されますが、現在のシェル上で実行させたいときは、()ではなく{}を使用します。
あとがき
上に紹介した方法を駆使すれば、よりコンパクトなコードでコマンドを連続実行できます。