Ubuntu
具有命令替換的環境變數未正確設置
我正在使用 Windows 10 WSL (Ubuntu 20.04) 並試圖讓命令正常工作,但無法設置環境變數。
我需要執行:
export ADB_SERVER_SOCKET=tcp:<variable ip here>:5037
因為在這種情況下,需要替換的 IP 需要來自 Windows,這是我想出的最後一個命令:
export ADB_SERVER_SOCKET=tcp:$(cmd.exe /C ipconfig | grep "IPv4" | awk 'NR==1{print $14}'):5037
在這種情況下,
cmd.exe
命令會列印出來:cmd.exe /C ipconfig | grep "IPv4" | awk 'NR==1{print $14}' 192.168.0.11
但是,如果我在執行它後檢查變數是什麼,我會得到:
echo "$ADB_SERVER_SOCKET" :503792.168.0.11
我也嘗試在整個內容周圍添加引號,但輸出似乎總是相同的。我認為無論出於何種原因,它都會用 :5037 替換 tcp:1 。
我怎樣才能讓它工作?
正如RudiC在評論中正確提到的那樣:
… windows 命令的輸出有一個尾隨 (\r, 0x0D, ^M) 字元,該字元使該行向後折疊並在 pos 1 處繼續。
Carriage Return (
CR
) 和Line Feed (LF
) 來自打字機時代:CR
將導致滑軌(托架)返回到其起始位置(最左側),同時LF
將導致紙捲在下一行中進給。Windows 行結尾總是
CRLF
,而 Unix 行結尾是LF
.額外
CR
的導致游標跳回第一個位置,覆蓋之前的位置。如果您刪除它(
tr
例如),您將獲得預期的輸出。echo tcp:$(cmd.exe /C ipconfig | grep "IPv4" | awk 'NR==1{print $14}' | tr -d $'\r'):5037