【问题标题】:Changing bash prompt temporarily by own script [duplicate]通过自己的脚本临时更改 bash 提示符[重复]
【发布时间】:2016-10-07 14:10:11
【问题描述】:

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

#!/bin/bash

PS1='\u:\W\$ '

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

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

提前谢谢你

【问题讨论】:

  • 顺便说一句,您可能会考虑为此使用 shell 函数而不是脚本。
  • 就是说给~/.profile或者~/bashrc添加一个函数?
  • ~/.bashrc,而不是 ~/.profile -- bashrc 为每个交互式 shell 执行,配置文件仅用于登录 shell(在某些操作系统中试图通过以下方式为用户“更容易”)消除差异,但依靠其中之一是不好的形式),并且常规函数不会被子进程继承,因此(与适用于~/.profile的环境变量不同)你不会在任何地方得到它们你需要他们,除非他们在~/.bashrc
  • ...您也可以从PROMPT_COMMAND 调用您的函数,然后它会被自动调用(如果它实际上是在检查终端宽度并决定使用哪个提示)。

标签: linux bash shell command prompt


【解决方案1】:

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

你需要source一个脚本,而不是执行它,它才能影响你的交互式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 获取的脚本) ,而旨在执行而不是获取源的脚本不应具有扩展名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-12
    • 2014-09-16
    • 2010-10-13
    • 2013-08-25
    • 2019-03-20
    • 1970-01-01
    • 2013-11-14
    • 2016-10-17
    相关资源
    最近更新 更多