Shell函数调用异常:仅返回日志echo而非PID,需实现PID返回至function2
Shell函数返回指定PID值的解决方案
问题分析
当使用$(function1 contains)捕获函数输出时,会收集函数所有**标准输出(stdout)**的内容。原代码中日志信息和PID都通过echo输出到stdout,导致output变量同时包含日志和PID,无法单独获取到目标PID值。
解决方法
将日志信息输出到标准错误(stderr),这样$(...)只会捕获标准输出中的PID值。通过>&2可以将echo的内容重定向到stderr,避免和返回的PID混淆。
修改后的代码如下:
function1(){ matchType=$1 if [[ $matchType == 'contains' ]];then PID=$(pgrep -f a) elif [[ $matchType == 'exact' ]];then PID=$(pgrep -x a) fi if [[ $? -eq 0 ]];then echo "process id fetched successful" >&2 # 日志输出到stderr,不被捕获 else echo "process id fetched failed" >&2 # 修正原代码缺少空格的语法问题,输出到stderr fi echo "$PID" # PID输出到stdout,供变量捕获 } function2(){ output=$(function1 contains) # 可在此验证结果 echo "获取到的PID: $output" }
补充说明
>&2是Shell中将标准输出重定向到标准错误的写法,日志信息会直接打印到终端(或脚本的错误输出流),不会被$(...)捕获。- 建议用
$(command)替代反引号`command`,这是更现代、可读性更好的命令替换写法。
内容的提问来源于stack exchange,提问作者Nitin Alety
相关产品推荐
相关产品推荐

