San*_*mar 10 command-line vim terminal io-redirection locate
假设我有一个名为的文件,filename123.txt并且它是单个文件,我可以locate使用命令locate filename123. 它只返回这个文件。
现在我想用vi/打开它vim。但我不想去那个位置并键入vi命令后跟文件名。在这里,我希望将 的结果locate filename123附加到 vi 命令。我怎么能这样做?我已经尝试过:
locate filename123 | vi
Run Code Online (Sandbox Code Playgroud)
但这不起作用。这个错误出现在终端中:
santosh@santosh:~$ locate filename123 | vi
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: Finished.
Run Code Online (Sandbox Code Playgroud)
man*_*ork 12
您可以使用xargs:
locate filename123 | xargs vi
Run Code Online (Sandbox Code Playgroud)
默认情况下,xargs将尽可能少地执行指定命令的实例,根据系统的ARG_MAX传递尽可能多的参数。要限制传递给 实例的参数数量vi,请使用xargs'-n选项。
要处理包含空格的文件名,请使用xargs'-d选项:
locate filename123 | xargs -d '\n' vi
Run Code Online (Sandbox Code Playgroud)
要处理包含换行符的文件名,请使用xargs'-0选项和locate'-0选项:
locate -0 filename123 | xargs -0 vi
Run Code Online (Sandbox Code Playgroud)
(如果-0它们中的任何一个都不可用,请检查--null太或另一种将字符指定\000为分隔符的方法。)