为什么我的Linux提示符显示$而不是登录名和路径?


13

在我的一台服务器上,提示是[user @ host path] ...,我实际上可以按“ tab”键自动填充路径。

但是在我的新Ubuntu服务器上,这只是一个美元符号?


1
您始终可以键入pwd以打印当前工作目录的名称。而且您是说Tab补全也不起作用吗?(在我使用的某些计算机上,只有当我以root用户身份登录时,才会收到该简短提示,并且我很乐意将其保留在适当的位置,以作为一个很好的警告。因为很少有,即使有,也需要以root用户身份登录:您未使用root用户身份,是吗?)
Arjan

亚历克斯,您能告诉我们您使用的发行版吗?
反转

我正在使用Ubuntu。
亚历克斯

最新的Ubuntu?而且您是说Tab补全也不起作用吗?
Arjan

您似乎在问两个问题:为什么不使用Tab键自动填充路径,为什么提示只是美元符号而不是[user @ host path]。对答案进行投票有点困难,因为两者都无法回答。
约瑟夫·霍尔斯滕

Answers:


27

由于您要问两个问题,所以我都会回答。

为什么不制表自动完成文件路径?

因为您的外壳程序不支持它,或者选项卡补全没有打开。

要解决此问题,您首先需要发现您的外壳是什么。在您喜欢其外壳的机器上运行

echo $SHELL

您可能会看到common /bin/bash,或者不太常见的东西like /bin/tcsh/bin/zsh或者完全是其他东西。

现在,您可以在Ubuntu计算机上更改外壳。在该计算机上,首先确保所需的外壳存在。由于外壳程序在Ubuntu机器上的位置可能与其他机器不在同一位置,因此请键入以下内容检查位置

 which bash

这会给你你想要的外壳的路径,像/bin/bash/usr/bin/bash/usr/local/bin/bash。当然,如果你想比其他的bash壳,你会说which tcshwhich zsh或者类似的。

如果看不到路径,而是看到bash not found,则需要安装适当的软件包,然后再次使用which以查找外壳程序的安装位置。

使用所选外壳程序的路径,最终可以通过运行以下命令更改外壳程序

chsh -s /bin/bash

/bin/bash适合您选择的外壳的任何适当路径替换。

为什么提示是美元符号而不是[user @ host path]?

由于您的提示环境变量$PS1$PS2等等。这些东西在shell之间往往不易于移植,因此这里有一些可能的候选对象链接:

bash有一本详尽的手册,其中包含有关Bash变量(包括PS1,&c)和“ 打印提示”(描述PROMPT_COMMAND的长名称PS1)的页面。将以下行添加到您的~/.bashrc

export PS1='[\u@\h \w] '

tcsh联机手册(仅其手册页),其中有关于提示环境变量的部分。将以下行添加到您的~/.tcshrc

set prompt='[%n@%m %~] '

zsh有一个用户指南,一个简单的提示指南和一个手册,以及关于提示扩展的非常详细的参考。将以下行添加到您的~/.zshrc

export PS1='[%n@%m %~] '

6

Bash不是唯一的外壳。

您的问题可能是没有设置PS1的.profile或.bashrc的简单问题,或者可能是您的登录shell根本不是bash。

Bash gnu readline用于制表符补全。这是一个复杂的主题,readline甚至具有其自己的每用户配置文件。

man bashman shman 3 readline。Bash回应--version。在许多linux系统上,/bin/sh实际上并不是bash,而是通常的残废版本ash


1
不是dash代替ash?我以为我读过这样的东西
knittl

2
+1表示没有.profile或.bashrc-除非Alex在安装Ubuntu时最初设置了自己的帐户,然后默认情况下,新用户没有.bashrc或没有PS1设置。
2009年

4

我想,您没有使用bash,但是sh和您的提示设置不正确(如果使用sh甚至可以)。

您可以通过输入以下内容获取当前的shell: echo $SHELL

如果您想开始bash,只需键入 bash


您可以使用其他shell设置提示。没有称为的shell sh。回显$SHELL将打印一个名为的环境变量SHELL。该环境变量仅指向shell,并且仅由bash设置。确定哪个shell正在运行几乎没有用,因为它只是微弱地表明当前进程的某些父级可能已经被bash占用。
DigitalRoss

好了,shell的程序名称是sh(在/ bin / sh中)。是的,echo $ SHELL将打印通常设置的变量SHELL。
knittl

每个Unix系统都有一个名为的可执行文件/bin/sh。但是我不知道它的名字叫shell sh。我能想到的ashkshcshbashzsh,和tcsh。第一个是linux和NetBSD上通常的/ bin / sh,最后一个是通常的FreeBSD shell,其他是可选的shell。许多桌面环境将用户登录shell更改为bash,而将/ bin / sh保留为ash。
DigitalRoss

2
@DigitalRoss sh是Bourne外壳。en.wikipedia.org/wiki/Bourne_shell某些系统(Solaris)仍带有Bourne shell版本,它不仅是重新实现之一(ash,dash,bash,bash,ksh,zsh)的副本。
克里斯·约翰森,

...并且bash被称为“ Bourne Again Shell”,它继承了Bourne Shell,csh和ksh的某些功能。
反转

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.