修改 bash 脚本 - 通过临时文件调用更改提示颜色

修改 bash 脚本 - 通过临时文件调用更改提示颜色

我想知道为什么以下脚本不起作用:

#!/bin/bash
read -p 'First lets write PROMPT.SH'
echo '#!/bin/bash'>prompt.sh
echo "export PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '">>prompt.sh
read -p "Change Title and Prompt"
source prompt.sh
echo texttexttext
read -p "Now lets tidy up PROMPT.SH"
rm ./prompt.sh
read -p "That was the program"

我想做的是更改窗口标题、提示和文本颜色,这些我通常都可以做到,

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

在常规 bash 会话期间,但当我将其添加到脚本然后运行该脚本时却不行。

答案1

PS1仅在交互式提示中显示。它与显示的提示无关read -p。即使读取输入,也不会考虑执行 bash 脚本交互的

答案2

我不太清楚您要做什么,但我猜这是PS1从脚本中为您的交互式 shell 进行的设置。这样说,您无法做到。在 *nix 和类 Unix 系统中,进程特征/属性从父级传递到子级,但从不反过来。例如,如果您将设置为PATH包含/foo,然后运行尝试运行的脚本bar,它会发现— 但如果您在脚本中/foo/bar更改,它不会影响您的交互式 shell。和也是如此。这些是与 Windows 命令提示符(批处理)世界的区别。PATHcdumask

话虽如此,答案是有的,而且你已经知道了。如果你的脚本(10 行脚本)名为andy.sh,那么你应该能够通过输入 来获得你想要的效果source andy.sh。但这是愚蠢的过度杀伤(除非你只是为了练习编写脚本);只需输入

PS1='\e[1;31m\]\u@\h \W\$\e[0m\] '

进入drew.sh并输入source drew.sh

但也要研究alias命令。

相关内容