<分区>
我想写一个小的 shell 脚本,当它变得太长时缩短命令提示符。在 bash 中设置 PS1 变量工作正常。当我直接在脚本中尝试相同的命令并运行它时,没有任何反应。
#!/bin/bash
PS1='\u:\W\$ '
我尝试了 eval "PS1='\u:\W\$ '"
、export PS1='\u:\W\$ '
和 exec PS1='\u:\W\$ '
没有任何结果。
如何获得与在 bash 中直接输入相同的结果?
提前致谢
<分区>
我想写一个小的 shell 脚本,当它变得太长时缩短命令提示符。在 bash 中设置 PS1 变量工作正常。当我直接在脚本中尝试相同的命令并运行它时,没有任何反应。
#!/bin/bash
PS1='\u:\W\$ '
我尝试了 eval "PS1='\u:\W\$ '"
、export PS1='\u:\W\$ '
和 exec PS1='\u:\W\$ '
没有任何结果。
如何获得与在 bash 中直接输入相同的结果?
提前致谢
最佳答案
一般来说,在 UNIX 中,进程只能更改其自身及其子进程的变量,而不能更改其父进程(“其父进程”是调用它的进程)。
您需要获取 一个脚本,而不是执行它,以便它能够影响您的交互式 shell 的变量。这会在当前 shell 中执行脚本内的所有命令,而不是作为子进程启动的新 shell(其变量值在退出时被丢弃)。
# in bash
source yourscript
# or in POSIX sh
. yourscript # mind the space!
在这种用法中,shebang 什么都不做;同样,也不需要 +x
权限。命名脚本的来源也很典型,而不是通过扩展映射到它们打算被使用的 shell 来执行(yourscript.bash
对于 bash,yourscript.sh
对于可以由任何 POSIX shell 获取的脚本),而旨在执行而不是获取的脚本应该没有扩展名。
关于linux - 通过自己的脚本临时更改 bash 提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683334/