如何解决调用xterm并使用变量运行命令
我想用两个命令调用xterm,其中第一个命令是回显一些头消息,然后是其他一些命令(对于此示例代码,为了简单起见,我使用sleep命令)。带有“ 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'
解决方法
变量不能在单引号('
)内使用,而只能在双引号("
)内使用:
% 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
可以包含单引号或末尾带有\
,则此方法将无法正常工作。报价很复杂,特别是因为您要处理两个不同的外壳程序(您的脚本和xterm中的sh
),每个外壳程序都有自己的引用规则,因此使用环境变量可能更好:
setenv msg1 "$msg1"
然后您可以使用与上面相同的命令,因为环境变量是由子进程继承的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。