我的意思是在 1-liner 中执行此操作:
ubu@ubuntu:~$ locate filename.sh
/home/ubu/path/to/filename.sh
ubu@ubuntu:~$ gedit /home/ubu/path/to/filename.sh
Run Code Online (Sandbox Code Playgroud)
我似乎无法弄清楚这样做的正确管道
如果filename.sh您的系统上只有命名的文件,这可能会起作用
gedit "$(locate filename.sh)"
Run Code Online (Sandbox Code Playgroud)
或者,正如 Hennes 指出的,如果文件名在您的 PATH 中:
gedit "$(which filename.sh)"
Run Code Online (Sandbox Code Playgroud)
这两个还有另一个问题:shell 从命令替换中删除了尾随换行符,$(...). 因此,在您的文件名以换行符结尾的病理情况下,这将失败。
为避免这些问题,请尝试:
locate -0 "filename.sh" | xargs --null gedit
Run Code Online (Sandbox Code Playgroud)
这将为gedit找到的每个文件打开一个选项卡。
该-0选项告诉locate返回一个空分隔的文件名列表。该--null选项告诉xargs将其输入解释为空分隔列表。因此,这将适用于带有换行符或其他困难字符的文件名。
为方便起见,您可以创建 shell 函数:
lge() { locate -0 "$@" | xargs --null gedit; }
Run Code Online (Sandbox Code Playgroud)
并将其用作: lge filename.sh
要使函数定义永久化,请将其放在您的~/.bashrc.