2016-06-07 24 views
2

我想编写一个很小的shell脚本,它会在命令提示符变得太长时缩短它。在bash中设置PS1变量可以正常工作。当我在脚本中直接尝试相同的命令并运行它时,没有任何反应。通过自己的脚本临时更改bash提示

#!/bin/bash 

PS1='\u:\W\$ ' 

我试过eval "PS1='\u:\W\$ '"export PS1='\u:\W\$ 'exec PS1='\u:\W\$ '没有任何结果。

我如何才能达到与bash中的直接输入相同的结果?

预先感谢您

+0

顺便说一句,你可能会考虑使用shell函数而不是脚本。 –

+0

这意味着添加一个函数〜/ .profile或〜/ bashrc? – mremergo

+0

'〜/ .bashrc',而不是'〜/ .profile' - 每个交互式shell都会执行bashrc,该配置文件仅适用于登录shell(除了某些操作系统,通过擦除来尝试“更容易”不同之处在于它们之间存在差异),而常规函数不会被子进程继承,所以(与环境变量不同,它适用于'〜/ .profile')不会得到他们到处都需要它们,除非它们在'〜/ .bashrc'中。 –

回答

1

一般来说,在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提供的脚本),而脚本用于被执行而不是源代码应该没有扩展。