Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 通过自己的脚本临时更改bash提示符_Linux_Bash_Shell_Command_Prompt - Fatal编程技术网

Linux 通过自己的脚本临时更改bash提示符

Linux 通过自己的脚本临时更改bash提示符,linux,bash,shell,command,prompt,Linux,Bash,Shell,Command,Prompt,我想写一个很小的shell脚本,当commmand提示符太长时可以缩短它。在bash中设置PS1变量可以正常工作。当我直接在脚本中尝试相同的命令并运行它时,什么都没有发生 #!/bin/bash PS1='\u:\W\$ ' 我尝试了eval“PS1=”\u:\W\$”,export PS1=“\u:\W\$”和exec PS1=”\u:\W\$”,但没有任何结果 如何实现与bash中的直接输入相同的结果 提前感谢一般来说,在UNIX中,进程只能更改自身及其子进程的变量,而不能更改其父进程(

我想写一个很小的shell脚本,当commmand提示符太长时可以缩短它。在bash中设置PS1变量可以正常工作。当我直接在脚本中尝试相同的命令并运行它时,什么都没有发生

#!/bin/bash

PS1='\u:\W\$ '
我尝试了
eval“PS1=”\u:\W\$”
export PS1=“\u:\W\$”
exec PS1=”\u:\W\$”
,但没有任何结果

如何实现与bash中的直接输入相同的结果


提前感谢

一般来说,在UNIX中,进程只能更改自身及其子进程的变量,而不能更改其父进程(“其父进程”是调用它的进程)

为了使脚本能够影响交互式shell的变量,您需要源代码而不是执行脚本。这将执行当前shell中脚本内的所有命令,而不是作为子进程启动的新shell(其变量值在退出时被丢弃)


在这个用法中,shebang不做任何事情;同样,也不需要
+x
权限。命名要源代码的脚本,而不是使用扩展映射到它们要使用的shell来执行的脚本也是很常见的(
yourscript.bash
对于bash,
yourscript.sh
对于任何POSIX shell都可以源代码的脚本),而打算执行而不是源代码的脚本应该没有扩展。

BTW,您可以考虑使用shell函数而不是脚本。这意味着添加函数到~/.Prror或~/BASHC <代码> ~/.BasHrc>代码>,而不是<代码> ~//Prime< /代码>——对每个交互shell执行BASHC,配置文件仅用于登录shell(除了在某些操作系统中,这些操作系统试图通过消除差异来“简化”用户,但依赖其中一个是不好的),并且常规函数不会由子进程继承,因此(与环境变量不同,环境变量适用于
~/.profile
)除非它们在
~/.bashrc
中,否则无法在任何需要它们的地方获得它们……您也可以从
提示符命令调用函数,然后它将自动调用(如果它实际检查终端宽度并决定使用哪个提示符)。
# in bash
source yourscript

# or in POSIX sh
. yourscript # mind the space!