有没有办法捕获命令的输出及其返回值到 shell 脚本中的变量中?

发布于 2024-08-11 07:50:12 字数 391 浏览 8 评论 0原文

因此,假设我在一个脚本中有一个命令 foo,它既有返回值,又有我感兴趣的输出字符串,并且我想将它们存储到变量中(至少它的变量输出,并且它的返回值可以用于条件)。

例如:

a=$(`foo`)   # this stores the output of "foo"
if foo; then # this uses the return value
    stuff...
fi

我能想到的捕获该输出的最好方法是使用一些临时文件:

if foo > $tmpfile; then
    a=$(`cat $tmpfile`)
    stuff...
fi

无论如何我可以简化它吗?

So, let's say that I have a command, foo, in a script which has both a return value, and an output string that I'm interested in, and I want to store those into a variable (well at least its output for the variable, and its return value could be used for a conditional).

For example:

a=$(`foo`)   # this stores the output of "foo"
if foo; then # this uses the return value
    stuff...
fi

The best thing that I could think of to capture that output is to use some temporary file:

if foo > $tmpfile; then
    a=$(`cat $tmpfile`)
    stuff...
fi

Is there anyway I could simplify that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

甜宝宝 2024-08-18 07:50:12

这?

out=$(cmd)
rv=$?
if test $rv -eq 0; then
  echo "all good"
  echo $out
else
  echo "wtf, exit code was $rv"
fi

顺便说一句,$() 和反引号是具有相同效果的两种语法,这意味着您想要编写

$(`foo`)

if foo 输出您想要再次执行的命令的文本。喜欢:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)

this?

out=$(cmd)
rv=$?
if test $rv -eq 0; then
  echo "all good"
  echo $out
else
  echo "wtf, exit code was $rv"
fi

btw, $() and backticks are two syntaxes for the same effect, which means that you only want to write

$(`foo`)

if foo outputs a text of a command you want to execute again. like:

foo()
{
  echo echo date
}
$(foo)
$(`foo`)
怼怹恏 2024-08-18 07:50:12
output=`foo`
echo "Return: $?" # $? is the return code
output=`foo`
echo "Return: $?" # $? is the return code
柠檬色的秋千 2024-08-18 07:50:12

来自 bash:(注意第一列中的第一个 $ 是我的提示符)

$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc

不要使用 $() 加反引号,因为它实际上执行命令,然后执行其输出。

另请参阅:

From bash: (note the first $ in the first column is my prompt)

$ A=$(echo abc; false); echo status:$? A:$A
status:1 A:abc

Don't use $() plus backticks, as that actually executes the command and then executes its output.

See also:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文