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