使用输出重定向从 csh 中调用脚本

使用输出重定向从 csh 中调用脚本

我想要什么:

#!/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"

相关内容