Process
命令不返回 .zshrc 內的預期值
試圖執行:
function which_terminal { return (ps -p$PPID | awk "'NR==2'" | cut -d "' '" -f 11) }
在 .zshrc 中獲取一個正在執行的終端仿真器的變數,這樣我就可以為不同的終端仿真器配置不同的主題。
當我在命令行中執行這個命令時,我得到了正在使用的模擬器。但是當我嘗試將其添加到文件中時,我收到如下錯誤:
which_terminal:1: no matches found: (ps -p16632 | awk 'NR==2' | cut -d ' ' -f 11)
找不到錯在哪裡,如果有人可以幫忙
在shell中,函式的返回值就像一個命令的退出狀態:你只能返回一個小整數值,表示成功(0)或失敗程式碼(> 0)。
此狀態與命令的輸出無關。要執行命令並將其輸出儲存到變數中,請使用命令替換。要在函式中執行命令並將其輸出作為函式的輸出,只需執行該命令。
function which_terminal { ps -p$PPID | awk "'NR==2'" | cut -d "' '" -f 11 }
請注意,解析 的輸出
ps
是不可靠且過大的。(另外你弄錯了:你正在解析'NR==2'
toawk
和' '
tocut
,這兩個參數都是無效的參數;你需要單引號或雙引號將它們中的每一個括起來,而不是同時使用。)該ps
命令具有列印出你想要的任何欄位的選項,例如comm
執行檔的名稱(在 Linux 下被截斷為 16 個字元)或args
帶有參數的完整命令行(有時是命令的完整路徑,具體取決於呼叫方式)。function which_terminal { ps -p$PPID -o comm= }
或者,將輸出儲存到變數中:
parent_process_command=$(ps -p$PPID -o comm=)
您收到錯誤的原因是 zsh 試圖解析後面的內容
return
作為命令的參數(這裡是return
關鍵字的參數,但它們的解析方式相同)。它看到一個左括號並確定它是萬用字元表達式的開始。該萬用字元表達式將匹配名為ps -p16632
,awk 'NR==2'
or的文件cut -d -f 11
(帶有未在此處呈現的前導/尾隨空格),但由於您(不出所料)沒有具有任何這些名稱的文件,zsh 抱怨它沒有找到匹配項。return ?
如果您碰巧3
在目前目錄中呼叫了一個文件並且沒有其他具有單字元名稱的文件,則將返回 3。