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

标签 linux bash shell command prompt

<分区>

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

关于linux - 通过自己的脚本临时更改 bash 提示符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37683334/

相关文章:

c++ - 使用 boost 查找目录空间详细信息

linux - 在 Linux 中,如何判断进程使用了​​多少内存?

php - 来自 PHP 的带有 SFTP 的 shell 脚本

windows - 批处理文件中的 for 循环读取文件路径的文件

shell - Amazon 通过 cronjob 自动启动服务器

python - 通知包版本更改的脚本

Bash grep 命令开始于或结束于

php - 来自 php 网站的 exec bash 脚本,脚本未运行

bash - 在执行命令之前等待网络接口(interface)

macos - zsh:权限被拒绝:gam