如何更改用户提示,以便显示当前目录?

如何更改用户提示,以便显示当前目录?

我在 Linux 中创建了用户“ user11”,并使用该-d选项更改了其主目录,但是当我使用该用户登录时,它显示“ -bash-4.3$”。

用户 mod -d 屏幕截图

我想知道:

  1. “ ”的含义是什么-bash-4.3以及为什么会发生这种情况?
  2. 为什么user11打印其工作目录' /root'并user12打印' /phome/user12'?
  3. 我怎样才能将‘-bash-4.3’改为其通常含义(asuser11user12)?

答案1

您已标记了您的问题adduser,但您似乎实际上正在使用useradd:据我所知useradd(不像adduser)不会从/etc/skel目录中复制骨架文件 - 特别是,它不会为新用户创建默认的 ~/.bashrc。

逐一回答您的问题:

  1. 它是默认的 bash shell 提示符,在没有更定制的提示符(通常由用户的~/.bashrc文件提供)的情况下使用

  2. 因为你没有为你创建主目录user11(也没有useraddusermod -d你做这件事)

  3. 要么将默认文件复制.profile.bashrc用户/etc/skel的主目录中,要么删除用户并重新开始使用adduser

adduser 和 useradd 有什么区别?

答案2

关于您的问题……

  1. '-bash-4.3' 的含义是什么以及为什么会发生这种情况?

它是所使用的 shell 及其版本。

  1. 为什么 user11 打印其工作目录“/root”而 user12 打印“/phome/user12”?

/phome/user11因为用户 11在文件系统中没有主目录 ( )。

  1. 我怎样才能将“-bash-4.3”改为其通常含义(如 user11 或 user12)?

/phome/user11按照 的指定创建一个主目录getent

您所做的只是改变了查找用户主目录的位置信息,但没有创建用户主目录。

创建新的主目录user11

cp -a /etc/skel /phome/user11
chown -R user11:1009 /phome/user11

最好的方法是useradd ... -m自动创建用户主目录。

答案3

依次解决你的每个观点:

  1. -bash-4.3是 shell 的默认提示符,即 bash。它显示 shell 及其版本。提示符由环境变量设置PS1。请参阅Bash/Prompt 自定义

  2. user11$PS1与 user12的值不同。您可以通过echo $PS1为每个用户输入内容来验证这一点。

  3. 在中~/.bashrc,对于 user12,添加以下行:

    export PS1="${PWD}> "
    

PS1 在哪里设置

此环境变量的值可以在多个位置设置。最常见的位置是/etc/profile/etc/bashrc~/.bash_profile~/.bashrc

永久设置 PS? 字符串

约翰·库尔斯塔姆([电子邮件保护])写道:

字符串PS1应该在 中设置.bashrc。这是因为非交互式 bash 会特意取消设置PS1。bash 手册页告诉我们, 的存在与否PS1是了解一个人是处于交互式还是非交互式(即脚本)bash 会话的好方法。

我意识到这是startx一个 bash 脚本。这意味着,startx将消除你的提示。当你设置PS1.profile.bash_profile),在控制台登录,通过启动 X 时startx,你的PS1进程会被核爆,只剩下默认提示。

一种解决方法是启动xterms 和rxvts 并-ls强制它们读取.profile,但任何时候通过非交互式 shell 脚本调用 shell 时,中间人PS1都会丢失。system(3)使用sh -c,如果 sh 是bash. 将杀死PS1。更好的方法是将PS1定义放在 中.bashrc。每次 bash 启动时都会读取它,并且交互式事物 - 例如PS1应该放在这里。

因此需要强调的是,PS1=..blah..应该在.bashrc ,而不是.profile

bash 提示符是一个广泛的主题,太宽泛了,无法在这里全面讨论。有关进一步的 bash 提示符自定义,请参阅Bash 提示符操作指南

相关内容