我的 .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
才能看到它工作(或者启动新的外壳)。
有关该功能的三个评论。这将起作用主要是。捕获一些角案件:
-
使用
function mkcd { ...; }
或mkcd() { ...; }
。第一个与ksh
兼容,但前提是您丢弃()
。mkcd()
符号是标准POSIX符号。 -
即使
mkdir -p
也可能失败,因此将cd
在mkdir
上进行条件。 -
最后,您需要一个参数为
mkdir
和cd
。仅使用一个参数,并测试其具有参数替换中的:?
修饰符的值。这将阻止函数向您发送$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的定义。