无法修改.bashrc

  • 本文关键字:bashrc 修改 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]

我该如何修复?

如果您可以接受必须将目录的名称传递为第一个参数的限制,则应看起来像这样:

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

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

有关该功能的三个评论。这将起作用主要是。捕获一些角案件:

  1. 使用function mkcd { ...; }mkcd() { ...; }。第一个与ksh兼容,但前提是您丢弃()mkcd()符号是标准POSIX符号。

  2. 即使mkdir -p也可能失败,因此将cdmkdir上进行条件。

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

在一起:

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

将其放入您的.bashrc中,然后打开一个新的外壳。类型type mkcd。这应该回应:

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

我在bash 4.2.45和linux 3.8.0上运行了您的MKCD功能,并且按预期工作。在新鲜窗口或运行

中登录
source ~/.bashrc 

在您现有的窗口中应为您定义功能。如果它不起作用,您将收到一个错误消息:

mkcd: command not found

虽然HEK2MGL的建议不需要使其正常工作,但确实使它变得更有意义,因为您只能使用CD到一个目录。

henk langeveld和hek2mgl所说:"错误的shell。不良放置()s是TCSH产生的消息。切换到bash或ksh。"

我认为在Ubuntu上打开一个终端进入了狂欢环境。实际上,如下所述,"终端将启动按/etc/passWD中定义的登录外壳的副本"。通过在终端中键入ps -p $$,我意识到我的设置为tcsh,c shell。在这种情况下,需要键入bash才能进入BASH环境。

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

相关内容

  • 没有找到相关文章

最新更新