我的意思是用一行代码来做这件事:
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
。