0

在我的 .bashrc 文件中,我有以下几行:

alias cd='_cd'

function cd() 
{
    cd "$1"
    PS1='[$USER] "$PWD" $ '
}

但是,在获取我的 .bashrc 之后,每次我尝试运行命令时,都会收到一条进程完成消息,并且我被锁定在 shell 之外。

[prompt] $ source ~/.bashrc
[prompt] $ cd ~

[Process completed]

如何在不收到流程完成消息的情况下轻松实现此功能?

4

2 回答 2

2

您的cd函数是递归的,最终外壳变得太深而放弃。

确保您在cd函数内部调用 shell:

cd() {
    builtin cd "$1"
    PS1='[$USER] "$PWD" $ '
}

如果您使用以下方式定义提示,则不必这样做:PS1='[\u] "\w" \$ '-- 请参阅 bash 手册页的 PROMPTING 部分。

于 2015-12-02T02:31:49.070 回答
0

声明alias cd='_cd'并不意味着您将内置命令cd更改为_cd。这意味着您正在制作_cd的别名,当您输入cd时会调用该别名。命令扩展遵循别名、函数、内置函数和 $PATH 中的可执行文件的顺序。因此,如果存在同名的别名、函数和内置函数,则将执行别名。

接下来,您似乎正在尝试使用功能设置您的 PS1,而正如 Jonathan 解释的那样,最好在您的.bashrc喜欢中简单地声明它

PS1='[$USER] "$PWD" $ '

但是,我建议使用提示识别的特殊字符而不是系统变量。

$USER is the current user, which in PS1 can represented by \u
$PWD is the working directory, you have the option here to show the full path with \w or just the current with \W.
There are a lot of other useful options, but you should check them out by yourself.

https://www.gnu.org/software/bash/manual/bashref.html#Controlling-the-Prompt

所以你的提示可能是这样的PS1=[\u] \w $

于 2015-12-02T01:31:59.110 回答