將locate 的輸出作為參數傳遞給編輯器

將locate 的輸出作為參數傳遞給編輯器

我的意思是在一行中執行此操作:

ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh

我似乎無法找出正確的管道來做到這一點

答案1

簡單但有限的解決方案

如果您的系統上只有指定的文件filename.sh,這可能會起作用

gedit "$(locate filename.sh)"

或者,正如 Hennes 指出的那樣,如果檔案名稱在您的 PATH 中:

gedit "$(which filename.sh)"

這兩者還有另一個問題:shell 從命令替換中刪除尾隨換行符號$(...)。因此,在檔案名稱以換行符號結尾的病態情況下,這將會失敗。

通用解決方案

為了避免這些問題,請嘗試:

locate -0 "filename.sh" | xargs --null gedit

gedit這將為找到的每個文件打開一個選項卡。

-0選項指示locate返回以空分隔的檔案名稱清單。此--null選項告訴xargs將其輸入解釋為以空值分隔的清單。因此,這適用於帶有換行符或其他困難字元的檔案名稱。

為了方便起見,您可以建立 shell 函數:

lge() { locate -0 "$@" | xargs --null gedit; }

並將其用作:lge filename.sh

要使函數定義永久存在,請將其放在您的~/.bashrc.

相關內容