首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用` `bash -c`设置$PS4

使用` `bash -c`设置$PS4
EN

Stack Overflow用户
提问于 2018-05-31 14:45:01
回答 2查看 691关注 0票数 0

我正在尝试将$PS4设置为bash -c命令。示例:

代码语言:javascript
复制
bash -xc 'PS4='$(date "+%s.%N ($LINENO) + ")'; echo ABC; echo XYZ'

我试着用各种方法摆脱了引号、美元符号和括号,但都没有成功。

我所期望的输出是这样的,它可以通过具有/bin/bash -x shebang的shell脚本和$PS4定义获得:

代码语言:javascript
复制
#!/bin/bash -x 

PS4='$(date "+%s.%N ($LINENO) + ")'
echo ABC
echo XYZ

产生的结果:

代码语言:javascript
复制
...
11527777373.733823550 (4) + echo ABC
11527777373.754886273 (5) + echo XYZ
...

对于bash -c ...命令,我如何实现类似的目标?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-31 14:57:56

一种方法是使用$'...'引用,它允许嵌入单引号:

代码语言:javascript
复制
bash -xc $'PS4=\'$(date "+%s.%N ($LINENO) + ")\'; echo ABC; echo XYZ'

如果您可以不使用纳秒分辨率,我建议使用\D提示转义,而不是使用date

代码语言:javascript
复制
bash -xc $'PS4=\'\\D{%s} ($LINENO) + \'; echo ABC; echo XYZ'

请注意,您可以通过环境传递值来简化引用,尽管出于安全原因,如果bash作为根用户运行,这将无法工作。(bash将简单地忽略在环境中找到的任何PS4值。)

代码语言:javascript
复制
PS4='\D{%s} ($LINENO) + ' bash -xc 'echo ABC; echo XYZ'
票数 4
EN

Stack Overflow用户

发布于 2018-05-31 15:12:59

为了完整性(添加到already-quite-good answer from chepner中),您可以使用引用的heredoc将代码不加修改地放入变量中;然后,在双引用上下文中展开该变量,将其内容从字面上传递给如下内容:

代码语言:javascript
复制
cmd=$(cat <<'EOF'
PS4='$(date "+%s.%N ($LINENO) + ")'
echo ABC
echo XYZ
EOF
)

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

https://stackoverflow.com/questions/50627012

复制
相关文章

相似问题

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