首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用xterm并使用变量运行命令

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

Stack Overflow用户
提问于 2020-10-09 20:05:19
回答 1查看 51关注 0票数 0

我想用两个命令调用xterm,其中第一个命令是回显一些头消息,后面是一些其他命令(对于这个示例代码,为了简单起见,我使用了睡眠命令)。带有"echo $msg1“的exec命令不会输出任何消息。请帮我修一下。

代码语言:javascript
复制
#!/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'
EN

回答 1

Stack Overflow用户

发布于 2020-10-10 05:16:05

变量在单引号(')中不起作用,只能在双引号(")中起作用:

代码语言:javascript
复制
% set x = 'asdf'

% echo '$x'
$x

% echo "$x"
asdf

现在,xterm中的sh进程将看到echo "$msg1",但它不知道$msg1变量,因为它是脚本的本地变量,这是一个不同的进程。

您可以将该命令调整为类似以下内容:

代码语言:javascript
复制
exec /usr/bin/xterm -e sh -c "echo '$msg1' | tr '#' '\n' ; sleep 5"

但是,如果msg1可以包含单引号或在末尾有一个\,这将不会很好地工作。引用很复杂,特别是因为您要处理两个不同的shell(脚本和xterm中的sh ),每个shell都有自己的引用规则,所以使用环境变量可能更好:

代码语言:javascript
复制
setenv msg1 "$msg1"

然后,您可以使用与上面相同的命令,因为环境变量由子进程继承。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64279718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档