通过自己的脚本临时更改 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 来源的脚本),而旨在执行而不是来源的脚本应该没有扩展名。