始终键入c d..
或c d ..
向上移动一个目录。
将函数放在我的 .bash_profile 的下面,但只有空白之前的第一个字符 -“c” 被解释,而不是整个参数集 ( c d..
), - 我认为应该只有两个。抛出错误
bash: c: - command not found
在 bash 4.2.46 上。
想要解决这个问题,因为在命令行上用空格解释参数在未来会有更多潜在的用处。
功能:
changedir() {
if [[ $@ = "c d.." ]]; then
command cd ..
else
if [[ $@ = "c d.." ]]; then
command cd ..
fi
fi
}
另外,采用整个参数字符串哪个更好 - 包括空格: $*
或 $@
?
答案1
好吧,该函数名为changedir
,因此它只会在 shell 收到命令 时运行changedir [whatever]
。并非每次运行任何命令时都会运行。您可以滥用陷阱DEBUG
来为您输入的每条命令行运行一个函数,但我们这里不需要这样做。
相反,只需创建一个名为 的函数c
,该函数cd ..
在给定参数d..
、 或d
和时运行..
:
c() {
if [[ $1 = 'd..' ]] ||
[[ $1 = 'd' && $2 = '..' ]]; then
command cd -- ..
else
echo "Invalid arguments to 'c'! Only 'c d..' and 'c d ..' are supported." >&2
fi
}
或者,您可以shopt -s autocd
在 Bash 中使用,这将使 shell 在仅给出目录名称时转到目录。因此,foobar
会执行相同的操作cd foobar
(除非存在命令foobar
),并且只会..
进入目录。