我想写一个小的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 获取的脚本),而打算执行而不是源的脚本应该没有扩展名。