当前位置: 首页>>技术问答>>正文


在bash中,如何访问最后一个返回值?

,

问题描述

简单场景:我正在寻找在项目中间丢失的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”问题也包含这个答案。仍然与这个直接相关,所以离开它,但对不起该死。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/1629.html,未经允许,请勿转载。