当前位置:  开发笔记 > 编程语言 > 正文

Bash Scripting - shell命令输出重定向

如何解决《BashScripting-shell命令输出重定向》经验,为你挑选了2个好方法。

有人可以帮助解释以下内容:

如果我输入:

a=`ls -l`

然后ls命令的输出保存在变量中 a

但如果我尝试:

a=`sh ./somefile`

结果输出到shell(stdout)而不是变量a

我所期望的是shell尝试执行somefile存储在变量中的脚本的结果操作.

请指出我的理解有什么问题,以及可能的方法.

谢谢.

编辑:

只是为了澄清,脚本' somefile'可能存在也可能不存在.如果它存在,那么我希望脚本的输出存储在' a'中.如果没有,我想在' a'中存储错误消息"no such file or dir"



1> paxdiablo..:

我认为因为shell可能会将自己附加到/ dev/tty但我可能错了.为什么不在脚本上设置执行权限并使用:

a=`./somefile`

如果要将stderr stdout 捕获到a,只需使用:

a=`./somefile 2>&1`

要检查文件是可执行的:

if [[ -x ./somefile ]] ; then
    a=$(./somefile 2>&1)
else
    a="Couldn't find the darned thing."
fi

你会注意到我正在切换到$()方法而不是反引号.我更喜欢$(),因为你可以嵌套它们(例如," a=$(expr 1 + $(expr 2 + 3))").



2> Bogdan..:

您可以尝试新的和改进的命令替换方法,使用$()而不是反引号.

a=$(sh ./somefile)

如果它仍然不起作用,请检查某个文件是否实际上不是stderr.

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有