我正在尝试使用快捷方式返回几个目录。例如"cd ...." == "cd <number of dots - 1> * '../'"
- 我尝试执行 alias '...'='../..' && cd ... 但得到了“没有那个文件或目录”
- 然后我尝试做别名'...'='../..'但得到了“无效的别名”
- 我想我可以创建一个函数:
function bla { for i in $(seq $(($1 - 1))); do cd ../; done; }; bla 3
但这似乎不太优雅(而且我一次只使用一个 cd ../,这很糟糕(cd -
例如不会产生预期的效果)但我可以连接字符串并只在最后使用 cd)
我的问题是:如何解决(1)和(2),以及有没有更简洁的方法?
答案1
我建议
alias '...'='cd ../..'
有了它,您只需键入...
并向上移动两个目录即可(甚至比cd ...
!)
你甚至可以制作一整套这样的产品:
alias '..'='cd ..'
alias '...'='cd ../..'
alias '....'='cd ../../..'
alias '.....'='cd ../../../..'
...等等
或者,如果您想跳过所有输入操作,这将创建最多 100 个目录的所有别名:
alias_str=".."
cmd_str="cd .."
for i in $(seq 1 100);
do
alias ${alias_str}="$cmd_str"
alias_str="$alias_str."
cmd_str="$cmd_str/.."
done
答案2
使用这样的函数:
...() {
b=".."
# check that the argument is a number
if [[ ! "$1" =~ ^[0-9]*$ ]]; then
echo "Bad argument."
else
# if no arguments, or it is 1, just back 1 dir
if [[ $# -eq 0 || "$1" -eq 1 ]]; then
cd ..
else
for i in $(seq 1 "$1"); do
b+="/.."
done
cd "$b"
fi
fi
}
因此,您要传递要返回的目录数的参数。例如:
$ cd /home/user/Foo/bar
/home/user/Foo/bar$ ... 2
/home/user/$