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

时间:2015-03-14 03:26:32

标签: shell freebsd

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

1 个答案:

答案 0 :(得分:4)

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

export PS1="`whoami`@\H:\w\$ "

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

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

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

如果你想拥有该目录,你也可以像我一样。用以下内容替换上面的所有行:

PS1="`whoami`@\H:\w\$ "

由于"\$"设置$或#(用户/ 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“to root”,这是一个没有csh shell的备用root帐户。这很重要,因为你不应该将root shell改为远离csh!
  3. 绝对没有理由改变shell只是为了获得合适的提示。
  4. <强>更新
    有几个原因你不应该更改root用户的shell:

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

    2. 可预测性。您可能不是唯一的管理员。或者您可能会遇到pain

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

    4. 您拥有此exact reasontoor用户。它与uid具有相同的gidroot。您可以根据toor用户的心愿设置shell,并拥有一个干净的root帐户。只需使用su - toor而不是su -(或只为su创建和别名)。

    5. <强>参考文献:

      如何在不同的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 https://www.freebsd.org/cgi/man.cgi?query=sh

      的PS1变量的手册页