我的.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]
。
我该如何解决这个问题?
答案 0 :(得分:2)
如果您可以接受必须传递要创建的目录名称作为第一个参数的限制,它应如下所示:
# mkdir, cd into it
function mkcd ()
{
mkdir -p "$@"
cd "$1"
}
您需要运行source ~/.bashrc
才能看到它正常工作(或者启动新的shell)。
答案 1 :(得分:2)
关于该功能的三条评论。这将主要用于 。要抓住一些极端案例:
使用function mkcd { ...; }
或mkcd() { ...; }
。第一个与ksh
兼容,但仅限于您放弃()
。 mkcd()
表示法是标准的POSIX表示法。
即使mkdir -p
可能会失败,因此请cd
以mkdir
为条件。
最后,您只需要mkdir
和cd
的一个参数。仅使用一个参数,并在参数替换中测试它具有:?
修饰符的值。这将阻止该功能向您发送$HOME
。
合:
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的定义。