【问题标题】:How to make FreeBSD show full path of current shell?如何让 FreeBSD 显示当前 shell 的完整路径?
【发布时间】:2015-05-16 16:40:33
【问题描述】:

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

【问题讨论】:

  • export PS1='\u@\H: \W $' 工作吗?
  • @ElliottFrisch 因为 FreeBSD 使用 tcsh 作为默认 shell,可能是 set prompt = '[%n@%m:%~]%# '
  • 实际上 $ 看起来不像 tcsh 更像 /bin/sh。所以我建议使用另一个 shell,如 tcsh (comment2)、bash (comment1) 或 zsh

标签: shell freebsd


【解决方案1】:

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\$ "

不需要 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 主义。仅当您使用 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 -ssu root -c "/path/to/shell" 以多种方式轻松完成此操作。养成使用 root permissions 而不是 root user 的好习惯。大多数时候你应该使用sudo 而不是交互式的root shell。

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

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

  4. 您有此exact reasontoor 用户。它与root 具有相同的uidgid。您可以将外壳设置为您对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 https://www.freebsd.org/cgi/man.cgi?query=sh 的 PS1 变量的手册页

【讨论】:

  • 能否请您详细说明为什么将 root shell 更改为远离 csh 不是一个好主意?
  • 实际原因是您需要确保您的root shell 在紧急情况下可用。但最重要的是,需要更改 shell 表明您的工作模式很糟糕。做正确的事并不难——只是习惯问题。
  • 我不同意:除了糟糕的工作模式之外,可能有很多原因要更改 shell。示例:我有几个来自 Linux 且运行良好的 Bash 脚本;回收它们会很棒。
  • 您无需为 root 用户更改 shell 即可使用这些脚本。更改根 shell 的坏理由的完美示例。
  • 但是如果一个 shell 脚本测试在 Bash 上运行正常,可能会有许多 shell 扩展只保证在 Bash 上工作,而不是在任何其他 shell 上。如果我的脚本确实只需要 tail /var/log/gateways.log,这需要 root 权限会怎样?
猜你喜欢
  • 2011-01-28
  • 2010-10-11
  • 2012-05-14
  • 2015-09-23
  • 2010-10-26
  • 1970-01-01
  • 2011-03-26
相关资源
最近更新 更多