问题描述
简单场景:我正在寻找在项目中间丢失的wsdl
文件。
$ find -name '*.wsdl'
./some/very/very/long/way/to/some/lost/directory/filename.wsdl
现在我知道它在哪里,我想用这个文件做一些事情,比如编辑它。而不是复制/粘贴我的命令后面的路径,是否可以使用之前由find
返回的路径?就像可以访问您使用!$
键入的最后一个参数,或者您最后使用!!
命令。我已经读过可以使用$?
,但它只返回一个错误:0: command not found
$ echo $?
0: command not found
最佳解决方法
在命令替换中运行命令:
output=$( find -name '*.wsdl' )
echo "$output"
输出现在存储在output
变量中,您可以根据需要使用多次。
次佳解决方法
没有特殊的bash变量。
$?
包含最后一个命令的退出代码(0 =成功,> 0 = error-code)
您可以将find
的输出与-exec
标志一起使用,如下所示:
find -name '*.wsdl' -exec emacs {} \;
{}
将替换为find
找到的文件名。这将为每个找到的文件执行命令。如果要执行包含所有找到的文件作为参数的命令,请使用+
,如下所示:
find -name '*.wsdl' -exec emacs {} +
这将打开一个emacs实例,其中打开所有找到的.wsdl文件。
更通用的解决方案是将输出存储在变量中:
result=$(find -name '*.wsdl')
emacs $result
这适用于所有命令,而不仅仅是查找。虽然您也可以使用xargs
:
find -name '*.wsdl' | xargs emacs {}
第三种解决方法
如果您不介意最后一个命令执行两次,那么这是一个快速入侵,可以用最少的击键执行您想要的操作。
使用反引号,ala:
`!!`
例如
$ find . -name HardToFind.txt
some/crazy/path/to/HardToFind.txt
$ vim `!!`
*编辑:我看到上面链接的”possibly duped”问题也包含这个答案。仍然与这个直接相关,所以离开它,但对不起该死。