我的意思是在一行中執行此操作:
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
.