有人可以帮助解释以下内容:
如果我输入:
a=`ls -l`
然后ls命令的输出保存在变量中 a
但如果我尝试:
a=`sh ./somefile`
结果输出到shell(stdout
)而不是变量a
我所期望的是shell尝试执行somefile
存储在变量中的脚本的结果操作.
请指出我的理解有什么问题,以及可能的方法.
谢谢.
编辑:
只是为了澄清,脚本' somefile
'可能存在也可能不存在.如果它存在,那么我希望脚本的输出存储在' a
'中.如果没有,我想在' a
'中存储错误消息"no such file or dir"
我认为因为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))
").
您可以尝试新的和改进的命令替换方法,使用$()而不是反引号.
a=$(sh ./somefile)
如果它仍然不起作用,请检查某个文件是否实际上不是stderr.