- Published on
WSL Bashからcmd.exeを実行した際の挙動についての検証
- Authors
- Name
- Shou Arisaka / 有坂翔
Windows上でのLinux WSL Bashにおいて、WSL Bashからcmd.exeを実行した際の挙動についての検証について紹介します。
- 最初のcdしか実行されない
cmd.exe - <<EOF
cd
cd
EOF
- 2つとも実行される
cmd.exe - <<EOF
cd & cd
EOF
- なぜかエラーになる
cmd.exe - <<EOF
set ATOM_HOME=C:.atoms.atom & atom
EOF
C:\Users\ifgm2>set ATOM_HOME=C:\.atoms\.atom & atom
net.js:200
this._handle.open(options.fd);
^
Error: EINVAL: invalid argument, uv_pipe_open
at new Socket (net.js:200:18)
at createWritableStdioStream (internal/process/stdio.js:164:16)
at process.getStdout [as stdout] (internal/process/stdio.js:14:14)
at console.js:246:38
at NativeModule.compile (bootstrap_node.js:596:7)
at Function.NativeModule.require (bootstrap_node.js:541:18)
at setupGlobalConsole (bootstrap_node.js:310:41)
at startup (bootstrap_node.js:70:7)
at bootstrap_node.js:608:3
- 最初のコマンドのみ実行される
cmd.exe - <<EOF
set ATOM_HOME=C:.atoms.atom02
atom
EOF
- 2つとも実行される
cmd.exe /C "cd & cd"
- 何も出力されず実行もされない
cmd.exe /C <<'EOT'
cd
cd
EOT
- 何も出力されず実行もされない
cmd.exe /C <<'EOT'
set ATOM_HOME=C:.atoms.atom02
atom
EOT
- 何も出力されず実行もされない
cmd.exe /C <<'EOT'
set ATOM_HOME=C:.atoms.atom02 & atom
EOT
- 2つとも実行される
cmd.exe /C 'set ATOM_HOME=C:.atoms.atom02 & atom'
batchファイルの検証
cat > hoge.bat
cd
cd
- プロンプトにログインする
cmd.exe hoge.bat
- エラーになる(バグ)
cmd.exe /C hoge.bat
'hoge.bat' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。
Execute Batch file in Windows Subsystem for Linux - Stack Overflow
結論
複数のコマンドを実行したい場合は、バッチファイルやヒアドキュメントを使用せず、&
で連結して記述する。 e.g. cmd.exe /C 'set ATOM_HOME=C:.atoms.atom02 & atom'
batch file - How do I run two commands in one line in Windows CMD? - Stack Overflow