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