有人可以帮忙解释以下内容:
如果输入:
a=`ls -l`
然后,将ls命令的输出保存在变量
a
中但是如果我尝试:
a=`sh ./somefile`
结果输出到 shell 程序(
stdout
),而不是变量a
我期望的是shell的结果操作试图执行要存储在变量中的脚本'
somefile
'。请指出我的理解有什么问题以及执行此操作的可能方法。
谢谢。
编辑:
只是为了澄清,脚本“
somefile
”可能存在或可能不存在。如果存在,那么我希望脚本的输出存储在“a
”中。如果没有,我希望将错误消息“没有这样的文件或目录”存储在“a
”中 最佳答案
我认为是因为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))
”)。