如何让 FreeBSD 显示当前 shell 的完整路径?

Apr*_*rel 4 shell freebsd

FreeBSD 10.1 在控制台和 SSH 上的默认用户提示始终为$,无论 shell 当前位于哪个目录。如何将其更改为user@machine /full/path/to/current/directory $或类似的完整路径?

小智 5

FreeBSD 中的默认用户 shell 是 Bourne shell /bin/sh。您可以通过设置 PS1 变量来更改提示。在命令行上执行此操作:

export PS1="`whoami`@\H:\w\$ "
Run Code Online (Sandbox Code Playgroud)

要在每次登录时自动完成,您应该更改主目录中的配置文件.shrc

.shrc文件已经有一个可供您使用的替代提示 - 您只需取消注释这些行:

# set prompt: ``username@hostname$ ''
PS1="`whoami`@`hostname | sed 's/\..*//'`"
case `id -u` in
      0) PS1="${PS1}# ";;
      *) PS1="${PS1}$ ";;
esac
Run Code Online (Sandbox Code Playgroud)

如果你也想拥有这个目录,你可以像我一样做。将上面的所有行替换为:

PS1="`whoami`@\H:\w\$ "
Run Code Online (Sandbox Code Playgroud)

不需要 case 结构,因为"\$"它将提示符设置为 $ 或 #(用户/root)。

Bourne Shell 非常强大,并且在 FreeBSD 变体中可以轻松进行命令行编辑。我建议您坚持使用它,因为您编写的任何脚本都具有高度可移植性。请注意,FreeBSD 中的 Bourne shell 比 Linux 中的功能更强大。这就是 bash 在 Linux 上占主导地位的部分原因。FreeBSD 上的默认 shell 开箱即用更可用。如果你习惯了 Linux,你可以改用 bash,感觉更自在。如果没有 - 那么我会花时间学习 FreeBSD 上的 Bourne。如果你长大了,那么我会看看类似“zsh”的东西。但如果您的水平是弄清楚“PS1”,我强烈建议您坚持使用默认值!

对于您的问题,有一些评论我认为是不好的建议:

  1. export PS1='\u@\H: \W $'是一种打击主义。这仅适用于使用 bash shell 的情况。FreeBSD Bourne 没有"\u".
  2. 由于历史原因,“root”的 shell 被设置为“csh”。FreeBSD 中的 csh shell 是“tcsh”变体。然而,它仅针对 root 设置 - 并且您永远不应该以 root 身份登录!所有用户都默认使用 Bourne shell。我建议不要使用“csh”。您可以执行“su - toor”,而不是 su 到“root”,这是一个没有 csh shell 的备用 root 帐户。这很重要,因为您不应该将根 shell 更改为远离 csh!
  3. 绝对没有理由仅仅为了获得合适的提示而更改 shell。

更新:
您不应该更改 root 用户的 shell 有几个原因:

  1. 不需要!最佳实践是永远不要以 root 用户身份交互式登录。如果你这样做——你就做错了。如果您发现自己以普通用户身份登录并且仍然希望以交互方式使用 root 用户 - 您仍然可以使用sudo -s或通过多种方式轻松完成此操作su root -c "/path/to/shell"养成使用root权限而不是root用户的好习惯。大多数时候您应该使用sudo而不是交互式 root shell。

  2. 可预测性。您可能不是唯一的管理员。否则你可能会感到痛苦

  3. 单用户模式。如果您的系统出现问题,您可能最终只能安装/bin. 在这些情况下,将 shell 静态链接并放置在/bin. 第三方 shell 通常放置在/usr/local/bin(并动态链接)中,在紧急情况下可能不会安装。

  4. 您正是toor因为这个原因才拥有了用户。它具有相同uidgid作为root。您可以将外壳设置为您内心渴望的toor用户并拥有一个干净的root帐户。只需使用su - toor而不是su -(或只是创建并别名su)。

参考:

如何在不同的shell中设置PS1提示符:http://www.understudy.net/custom.html

不使用 C shell 的十大理由:http://www.grymoire.com/unix/CshTop10.txt

Csh 编程被认为是有害的:http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

Bourne Shell 的 PS1 变量的手册页https://www.freebsd.org/cgi/man.cgi?query=sh