为什么我的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 tcsh,which 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 bash,man sh和man 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。我能想到的ash,ksh,csh,bash,zsh,和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.