Process

命令不返回 .zshrc 內的預期值

  • June 21, 2018

試圖執行:

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' 'to cut,這兩個參數都是無效的參數;你需要單引號或雙引號將它們中的每一個括起來,而不是同時使用。)該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。

引用自:https://unix.stackexchange.com/questions/450705