问题描述
案例1
RUN_LOG="run.log"
CMD="java -DprofileName=$PROFILE ..."
$CMD &
PID=$!
我能够奔跑并获取pid。
案例2
$CMD | tee $RUN_LOG
我能够运行并将结果记录到文件中。
您知道我如何才能同时加入两者吗? 我想登录到文件和控制台,再加上pid作为ENV变量。
尝试1:
(echo "Command PID is $BASHPID";exec $CMD;) | tee $RUN_LOG
尝试2:
$CMD & PID=$! >> $RUN_LOG
pid在ENV变量 PID 中,但日志文件为空。
总结,我需要在环境变量PID中获取pid,将CMD的执行日志输出到控制台和文件(“ run.log”)
解决方法
变量无法转义子外壳。通过文件或fifo编写您的pid:
tmp=$(mktemp -u)
mkfifo "$tmp"
( echo "$BASHPID" > "$tmp"; exec $CMD ) | tee "$RUN_LOG" &
pid=$(cat "$tmp")
rm "$tmp"