私はバッチ ファイルと Putty を使用して、Windows 上の多くのプロセスを自動化します。
例 ( login_server7.bat ):
start C:\Users\Jack\Documents\putty.exe -ssh 1.1.1.1 -l user123 -pw "bleh"
ファイルを開いた後に Ubuntu ターミナルを起動してコマンドを自動的に実行するにはどうすればよいですか?
手動で Ubuntu ターミナルを開いてコマンドを入力するのではなく?
このトピックについては他に何も見つかりません。よろしく
答え1
WSL の実行ファイルは ですC:\Windows\System32\wsl.exe
。Windowswsl
コマンド プロンプトに と入力するだけで、デフォルトの WSL インスタンスにログインできます。または、 と入力して、wsl -h
使用可能なすべてのオプションの一覧を取得します。バッチ ファイルでは、以下を使用できます。
C:\Windows\System32\wsl.exe <your script or command>
または、コマンドを root として実行する必要がある場合:
C:\Windows\System32\wsl.exe sudo <your script or command>
おそらくより正しい方法は を使用することですwsl -e -- <command>
が、上記は私にとってはうまく機能します。より詳細な例を以下に示します。Ubuntu 18.04 の WSL cron デーモンが再起動後に実行されない。
答え2
ps4080
の回答で述べられているように、これを行う正しい方法はwsl -e -- <command>
(または、通常はwsl -e <command>
) です。
ただし、このテクニックでは実際にはかなりの数のニュアンスに遭遇する可能性があり、それぞれの呪文で何が起こっているのかを正確に理解して、必要なときに適切な呪文を使用できるようにしておくとよいでしょう。
wsl <command>
- 現在のユーザーのデフォルトシェルを実行します
- ...非ログイン、非対話型シェルとして
- ...所有するWindowsプロセスによって渡されたディレクトリ内
<command>
そのシェルで実行する
シェルに応じて、次のように表示できますwsl ps -eH
。
PID TTY TIME CMD
1 ? 00:00:00 init
18 ? 00:00:00 init
19 ? 00:00:00 init
20 pts/0 00:00:00 fish
28 pts/0 00:00:00 ps
bash
がデフォルトのシェルである場合、-c
暗黙的に になるため、これを確認するのは困難であることに注意してくださいexec
。
これが所有する Windows プロセスのディレクトリで実行されるという事実は、次の操作を実行できるため便利です。
wsl ls -lh
PowerShellで「人間が読める」ファイルサイズを取得するには、驚くほど難しいさもないと。
最も難しいのは2番目の修飾子です。WSLはこのように起動すると、シェルを非ログイン、非対話型シェルとして実行します。つまり、~/.bashrc
および~/.bash_profile
はない起動時にソース化されます。これにより、起動ファイルで何かを実行する必要があるコマンド (環境変数の設定など) を実行しようとすると混乱が生じる可能性があります。
wsl -e <command>
- 実行
<command>
としてシェル - ...所有プロセスによって渡されたディレクトリ内
デフォルト-e
のシェルを完全にバイパスします。
> wsl ps -eH
PID TTY TIME CMD
1 ? 00:00:00 init
7 ? 00:00:00 init
8 ? 00:00:00 init
9 pts/0 00:00:00 ps
これはわずかにシェルの起動オーバーヘッドを回避できるため、より効率的ですが、通常は心配する価値はありません。
wsl -e bash -lic <command>
bash
シェルとして実行されます(デフォルトのシェルであるかどうかに関係なく)- ログイン、対話型シェル( )を強制し、および(および/またはその他)がソースとなる
-li
ようにします。~/.bashrc
~/.bash_profile
- ...所有するWindowsプロセスによって渡されたディレクトリ内
<command>
そのシェルで実行する
これは、コマンドがスタートアップ構成から何かを必要とする場合に使用するバージョンです。