我想要什么:
#!/bin/csh
# call /myscriptpath/myscript.any and redirect 2>&1 and get retval and output
set my_msg = `/myscriptpath/myscript.any`
set my_ret = `echo $?`
- 如何从 myscript.any 捕获退出代码?
- 如果可能的话,如何从 myscript.any 捕获消息?
/myscriptpath/myscript.any 这按预期从 bash 命令行调用。
答案1
没有一种简单的方法(据我所知)可以处理等效项2>&1
并捕获标准错误也标准输出,特别是如果您也想要退出状态。不过,将两者通过管道连接cat
将合并输出流:
#!/usr/bin/csh
set my_tmp = ~/.msg.$$.tmp
set my_msg = `( /myscriptpath/myscript.any; echo $? >"$my_tmp" ) |& cat`
set my_ret = `cat "$my_tmp"`
rm -f "$my_tmp"
echo "ret=$my_ret, msg=$my_msg"
或者或者,如果您运行在诸如/dev/stout
存在基于Linux的系统之类的环境中,my_msg
请像这样分配:
set my_msg = `/myscriptpath/myscript.any >& /dev/stdout`
一个更简单的变体command |& cat
是/bin/sh
使用它的重定向功能。结果csh
块将是这样的,不需要$my_tmp
,
#!/usr/bin/csh
set my_msg = `sh -c '/myscriptpath/myscript.any 2>&1'`
set my_ret = $status
echo "ret=$my_ret, msg=$my_msg"