如何查看在 newgrp 中调用的命令的状态?
How to see status of a command called in newgrp?
我有一个 csh 脚本,它的 运行 部分需要使用 newgrp。为此,它递归调用自己。
#!/bin/csh
if ( == "" ) then
newgrp << ENDGRP
./newgrp_test.csh 2
if ( $status != 0 ) then
echo "Second run fail"
exit 1
else
echo "Second run success"
exit 0
endif
ENDGRP
if ( $status != 0) then
echo "Exiting failure"
exit 1
else
echo "Exiting success"
exit 0
endif
endif
if ( == "2" ) then
exit 1
endif
问题是我认为它应该保证失败,但我得到了成功的输出。我的输出如下所示:
Second run success
Exiting success
为什么我无法读取 newgrp 中脚本的状态?
请注意,我已经通过删除 newgrp 和 ENDGRP 之间的 if 块找到了解决方法,但我仍然很好奇。
变量 $status
被此处文档中的外部 shell 扩展。因此,当 newgrp
-spawned shell 运行时,它看到的是 if ( 0 != 0 ) then
而不是 if ( $status != 0 ) then
(因为 if
或其他 was successful immediately before the
newgrp` 命令).
您要么需要转义此处文档中的 $
:
if ( $status != 0 ) then
或引用此处文档单词的一部分以防止扩展完全发生:
newgrp << 'ENDGRP'
./newgrp_test.csh 2
if ( $status != 0 ) then
echo "Second run fail"
exit 1
else
echo "Second run success"
exit 0
endif
'ENDGRP'
我有一个 csh 脚本,它的 运行 部分需要使用 newgrp。为此,它递归调用自己。
#!/bin/csh
if ( == "" ) then
newgrp << ENDGRP
./newgrp_test.csh 2
if ( $status != 0 ) then
echo "Second run fail"
exit 1
else
echo "Second run success"
exit 0
endif
ENDGRP
if ( $status != 0) then
echo "Exiting failure"
exit 1
else
echo "Exiting success"
exit 0
endif
endif
if ( == "2" ) then
exit 1
endif
问题是我认为它应该保证失败,但我得到了成功的输出。我的输出如下所示:
Second run success
Exiting success
为什么我无法读取 newgrp 中脚本的状态?
请注意,我已经通过删除 newgrp 和 ENDGRP 之间的 if 块找到了解决方法,但我仍然很好奇。
变量 $status
被此处文档中的外部 shell 扩展。因此,当 newgrp
-spawned shell 运行时,它看到的是 if ( 0 != 0 ) then
而不是 if ( $status != 0 ) then
(因为 if
或其他 was successful immediately before the
newgrp` 命令).
您要么需要转义此处文档中的 $
:
if ( $status != 0 ) then
或引用此处文档单词的一部分以防止扩展完全发生:
newgrp << 'ENDGRP'
./newgrp_test.csh 2
if ( $status != 0 ) then
echo "Second run fail"
exit 1
else
echo "Second run success"
exit 0
endif
'ENDGRP'