微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

调用xterm并使用变量运行命令

如何解决调用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 举报,一经查实,本站将立刻删除。