有时当我想切换到父目录时,我错误地键入cd ,,而不是cd ... 有没有办法让 bash 认为这些语句是相同的?我从不在我的命令中使用逗号。理想情况下,我想别名,,为... 当我尝试这个时,它不起作用。为什么这不起作用?我还能如何解决这个问题?
$ alias ,,=..
$ cd ,,
-bash: cd: ,,: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Ben*_*ebe 58
别名并不意味着这样做,但您可以创建一个名为的函数cd,它是真实cd. 这个对我有用!只需将其放入您.bash_profile或您选择的配置文件中即可。
cd () { if [ "$1" = ",," ]; then builtin cd ..; else builtin cd "$@"; fi; }
Run Code Online (Sandbox Code Playgroud)
或者,使用注释和漂亮的格式:
cd ()
{
if [ "$1" = ",," ]; then # if first argument is ",,"...
builtin cd .. # call the builtin cd with ".." instead...
else
builtin cd "$@" # else call builtin cd with original arguments
fi
}
Run Code Online (Sandbox Code Playgroud)
编辑
感谢@derobert 指出if then else这里比&& ||. 另外,我刚刚意识到 ( *facepalm *) 只有当任何非路径参数(即-L -P)不是第一个参数时,这个实现才会起作用。所以要注意,如果你有打字的坏习惯,cd -L ,,这对你没有帮助。我认为,正确处理这件事并非易事。
sty*_*fly 44
如果zsh alias -g ,,=".."您正在使用的是您所需要的,但这将导致“,,”到处扩展,而不仅仅是与cd.
来自man zshbuiltins:
如果该
-g标志存在,则定义一个全局别名;全局别名即使没有出现在命令位置也会被扩展。
如果仅限于bash(因为问题被标记为bash),请阅读以下内容:
根据要求,这是一个纯别名解决方案,但是这将超出要求,可能会让用户感到沮丧(请参阅我帖子末尾的警告)。
引用man bash:
如果别名值的最后一个字符是空白,则还检查别名之后的下一个命令字的别名扩展。
因此,cd用一个额外的空格(以允许扩展其下一个参数)作为别名就足够了,然后别名,,为... 看到那个
alias cd='cd '
alias ,,='..'
Run Code Online (Sandbox Code Playgroud)
正是您所需要的。
请注意,这不仅适用于bash(及其alias实现),而且适用于所有 POSIX 兼容 shell。引用一个例子man 1p alias(手册没有明确描述这个特性,只是通过一个例子):
设置 nohup 以便它可以处理本身就是别名的参数:
Run Code Online (Sandbox Code Playgroud)alias nohup="nohup "
警告:
如在他的评论@PeterCordes写操作时,会自动事业等时后写别名扩大cd。它可能会要求你写cd \grep,如果你想改变目录到一个名为grep但你grep是一个别名grep --color=auto。没有反斜杠,cd会报“too many arguments”错误(你不能同时cd进入两个目录)!。
Ste*_*ven 29
别名必须是命令的第一个单词。此外,别名必须替换为一个单词,因此没有空格)。
当一个词用作简单命令的第一个词时,别名允许用一个字符串替换一个词。
您可以将..和都别名,,为cd ...
$ alias ..="cd .."
$ alias ,,="cd .."
$ cd /tmp && pwd
/tmp
$ ,, && pwd
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4935 次 |
| 最近记录: |