我想用两个命令调用xterm,其中第一个命令是回显一些头消息,后面是一些其他命令(对于这个示例代码,为了简单起见,我使用了睡眠命令)。带有"echo $msg1“的exec命令不会输出任何消息。请帮我修一下。
#!/bin/csh -f
set msg1 = ""
set msg1 = "$msg1#[INFO] xx"
set msg1 = "$msg1#[INFO] yy"
# not okay
exec /usr/bin/xterm -e sh -c 'echo "$msg1" | tr "#" "\n" ;sleep 5'
# okay
exec /usr/bin/xterm -e sh -c 'echo hello;sleep 5'
exec /usr/bin/xterm -e sh -c 'echo hello#world | tr "#" "\n" ;sleep 5'发布于 2020-10-10 05:16:05
变量在单引号(')中不起作用,只能在双引号(")中起作用:
% set x = 'asdf'
% echo '$x'
$x
% echo "$x"
asdf现在,xterm中的sh进程将看到echo "$msg1",但它不知道$msg1变量,因为它是脚本的本地变量,这是一个不同的进程。
您可以将该命令调整为类似以下内容:
exec /usr/bin/xterm -e sh -c "echo '$msg1' | tr '#' '\n' ; sleep 5"但是,如果msg1可以包含单引号或在末尾有一个\,这将不会很好地工作。引用很复杂,特别是因为您要处理两个不同的shell(脚本和xterm中的sh ),每个shell都有自己的引用规则,所以使用环境变量可能更好:
setenv msg1 "$msg1"然后,您可以使用与上面相同的命令,因为环境变量由子进程继承。
https://stackoverflow.com/questions/64279718
复制相似问题