无法修改.bashrc

时间:2014-01-24 20:25:36

标签: bash

我的.bashrc文件包含:

# mkdir, cd into it
function mkcd () 
{
    mkdir -p "$*"
    cd "$*"
}

当我在shell中输入mkcd时,我得到mkcd: Command not found。 当我输入source ~/.bashrc时出现错误:

Badly placed ()'s.

顺便说一下,我的文本编辑器(emacs)将代码识别为Shell-script[tcsh]

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:2)

如果您可以接受必须传递要创建的目录名称作为第一个参数的限制,它应如下所示:

# mkdir, cd into it
function mkcd () 
{
    mkdir -p "$@"
    cd "$1"
}

您需要运行source ~/.bashrc才能看到它正常工作(或者启动新的shell)。

答案 1 :(得分:2)

关于该功能的三条评论。这将主要用于 。要抓住一些极端案例:

  1. 使用function mkcd { ...; }mkcd() { ...; }。第一个与ksh兼容,但仅限于您放弃()mkcd()表示法是标准的POSIX表示法。

  2. 即使mkdir -p可能会失败,因此请cdmkdir为条件。

  3. 最后,您只需要mkdircd的一个参数。仅使用一个参数,并在参数替换中测试它具有:?修饰符的值。这将阻止该功能向您发送$HOME

  4. 合:

    function mkcd
    {
        mkdir -p "${1:?}" && cd "${1}"
    }
    

    将它放在.bashrc中并打开一个新shell。输入type mkcd。这应该回复:

    mkcd is a function,然后是其定义。

答案 2 :(得分:1)

我在bash 4.2.45和linux 3.8.0上运行了你的mkcd函数,它按预期工作。登录新窗口或运行

source ~/.bashrc 
现有窗口中的

应该为您定义功能。如果它不起作用,您将收到如下错误消息:

mkcd: command not found

虽然hek2mgl的建议没有必要让它工作,但它确实使它更有意义,因为你只是要cd到一个目录。

答案 3 :(得分:0)

由Henk Langeveld和hek2mgl评论:“错误的shell。错误放置()的是由tcsh生成的消息。切换到bash或ksh。”

我认为在ubuntu上打开一个终端直接进入bash环境。实际上,如下面所述,“终端将启动/ etc / passwd中定义的登录shell的副本”。通过在终端中键入ps -p $$,我意识到我的设置为tcsh,即C shell。在这种情况下,需要键入bash才能进入bash环境。

然后source ~/.bashrc编译mkcd的定义。