我怎样才能获得退出代码wget
来自子shell进程?
所以,主要问题是$?
等于0。哪里可以$?=8
成立?
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "$?"
0
它的工作原理无需tee
, 实际上。
$> OUT=$( wget -q "http://budueba.com/net" ); echo "$?"
8
But ${PIPESTATUS}
数组(我不确定它与这种情况有关)也不包含该值。
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[1]}"
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[0]}"
0
$> OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt" ); echo "${PIPESTATUS[-1]}"
0
所以,我的问题是 - 我怎样才能得到wget
的退出代码通过tee
和子壳?
如果有帮助的话,我的 bash 版本是4.2.20
.
通过使用$()
您正在(有效地)创建一个子shell。就这样PIPESTATUS
您需要查看的实例仅在您的子 shell 内可用(即在$()
),因为环境变量不会从子进程传播到父进程。
你可以这样做:
OUT=$( wget -q "http://budueba.com/net" | tee -a "file.txt"; exit ${PIPESTATUS[0]} );
echo $? # prints exit code of wget.
您可以使用以下方法实现类似的行为:
OUT=$(wget -q "http://budueba.com/net")
rc=$? # save exit code for later
echo "$OUT" | tee -a "file.txt"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)