【问题标题】:Preventing 'process completed' after bashrc function in OS X在 OS X 中的 bashrc 功能之后防止“进程完成”
【发布时间】:2015-12-02 00:24:09
【问题描述】:

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

alias cd='_cd'

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

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

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

[Process completed]

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

【问题讨论】:

  • 您定义了别名cd 来调用函数_cd,但是您定义了一个函数cd 而不是_cd?无论如何,您不需要在提示中设置 PWD 的功能,对吗?只需在任何函数之外用单引号将 PS1 设置为这样,它就可以正常工作,不是吗?而为了测试,也许你不应该修改真正的.bashrc;创建一个新文件(可能是bash.test)并对其进行编辑并获取该文件 - 然后在您确信一切正常时将代码添加到真实的.bashrc

标签: macos bash function command-line ps1


【解决方案1】:

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

确保您在函数内调用 shell 的 cd

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

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

【讨论】:

    【解决方案2】:

    声明 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 $

    【讨论】:

    • 抱歉回复晚了,但非常感谢!像魅力一样工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 2011-12-27
    • 2021-02-08
    • 1970-01-01
    • 2011-04-14
    • 2020-02-25
    • 1970-01-01
    相关资源
    最近更新 更多