将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

相关内容