PS1中的字符转义

3
我正在使用以下命令启动一个新的bash会话:
exec bash --init-file <(cat /etc/profile ~/.bashrc $ANOTHER_SCRIPT) -i
我想在无需添加另一个init文件的情况下更改新会话的提示符... 我怀疑我的最佳选择是类似于这样的东西:
exec bash --init-file <(cat /etc/profile ~/.bashrc $ANOTHER_SCRIPT; echo "PS1='[TEST] '$PS1") -i
我认为我的问题涉及转义字符... 但是我对如何继续处理在提示符之前添加我的标签一事毫无头绪。

非常感谢您的意见,

Andrew


有趣的是,exec bash --init-file <(cat /etc/profile ~/.bashrc $ANOTHER_SCRIPT; echo "PS1='[TEST] '$PS1")与exec bash --init-file <(cat /etc/profile ~/.bashrc $ANOTHER_SCRIPT; echo 'PS1="[TEST] "$PS1')是不同的。 - ajwood
将从“引号'内部'引号”更改为“引号“内部”引号”会导致它出错! - ajwood
2个回答

3

这应该可以工作:

exec bash --init-file <(cat /etc/profile ~/.bashrc $ANOTHER_SCRIPT; echo 'PS1="[TEST] $PS1"') -i

我也在寻找 [TEST] 和现有 PS1 之间的空格...但引用会解决这个问题。 - ajwood
@ajwood:根据您的评论,我修改了我的答案。 - Dennis Williamson
看一下你的回答和我问题中的代码之间的区别...为什么引号的差异会产生如此大的影响? - ajwood
@ajwood:单引号转义内容。双引号允许内容扩展。您可以使用跟踪(set -x)进行比较。尝试使用 ... set -x; echo "PS1 ... '...' ..."; set +x ... 命令与我的命令 ... set -x; echo 'PS1 ... "..." ...'; set +x ... 进行比较,您会看到很大的差异。(请使用真实命令而不是 ...。) - Dennis Williamson
啊哈,我是 Stack Overflow 的新手。我不认为吝啬有什么理由。你可以把自己当作得到小费了! - ajwood
显示剩余2条评论

1

PS1="[测试] $PS1"

你不能将这个命令放在同一行作为<(cat ...)进程替换,因为它只能接受文件,而应该将其放在你的~/.bashrc文件中。


分号不会处理这个问题吗? - ajwood

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接