如何使用指令開啟 WSL 終端機而不使其自動關閉?

如何使用指令開啟 WSL 終端機而不使其自動關閉?

我正在使用 WSL1 運行 Ubuntu,並且我想在 Windows 中創建不同的快捷方式以在 WSL 啟動時運行不同的命令,例如,一個用於自動啟動 SSH 會話,另一個用於更改到特定目錄。執行啟動命令後,我需要它像平常一樣繼續運行,但我嘗試過的所有操作都會關閉終端。我試過類似的東西

c:\windows\system32\bash.exe -c -i -s ssh ip

但它似乎沒有做任何事情,或者即使有,它關閉得太快,我看不到。

答案1

首先,我建議您使用較新的(Microsoft 推薦的)wsl.exe命令,而不是bash.exe. bash.exe仍然可用,但微軟稱其為“歷史命令”,已被“取代” wsl.exe。該wsl命令還提供了比舊命令更多的選項bash.exe

您遇到的第一個問題是命令列中存在語法/引用錯誤,所以是的,Windows 終端機選項卡在您可以閱讀之前就關閉了。最好先從 PowerShell 或 CMD 設定檔/標籤執行此命令,以便能夠看到輸出:

PS> bash.exe -c -i -s ssh ip
usage: ssh [-46AaCfGgKkMNnqsTtVvXxYy] [-B bind_interface]
           [-b bind_address] [-c cipher_spec] [-D [bind_address:]port]
           [-E log_file] [-e escape_char] [-F configfile] [-I pkcs11]
           [-i identity_file] [-J [user@]host[:port]] [-L address]
           [-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
           [-Q query_option] [-R address] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] destination [command]
PS> bash.exe -c "ssh ip"
user@ip's password:
PS> wsl ssh ip
user@ip's password:
PS> wsl -e bash -c ssh ip
<displays usage information as above>
PS> wsl -e bash -c "ssh ip"
user@ip's password:

正如您所看到的,如果您將命令字串傳遞給bash -c,則需要將其加引號。否則,bash 只會看到ssh沒有ip.

wsl另一方面,該命令允許直接調用而無需引號。它基本上足夠聰明,可以將命令行的其餘部分(在處理所有參數/標誌之後)傳遞到預設 shell,並引用參數-c。您可以透過上面的wsl ssh ip.

接下來您想知道如何在執行命令後保持選項卡/shell 開啟。這可以透過多種方式完成,但最簡單的是:

  • 啟動一個外殼
  • 運行第一個命令
  • exec將繼續運行的替換外殼

正如您所經歷的,僅執行前兩項操作就會導致 shell 在命令退出時關閉。

這看起來像:

wsl -e bash -c "ls; exec bash"

答案2

C:\Windows\System32\cmd.exe /k wsl /path/to/script.sh

/k 開關使 cmd 不退出,以便您可以讀取輸出。 wsl 沒有類似的開關。

相關內容