使用for循环创建别名(bash_profile)

时间:2019-03-22 01:19:14

标签: bash shell

我试图在.bash_profile中创建一个for循环,以遍历github文件夹中的所有目录,并创建一个别名,然后在项目工作区中打开。

我下面有一个工作脚本,但是每个别名都绑定到最后一个结果。

例如如果目录包含: 目录1 目录2 dir3

最终的别名如下:

op_dir1='cd ~/Documents/GitHub/dir3 && open . && atom .' 
op_dir2='cd ~/Documents/GitHub/dir3 && open . && atom .'
op_dir3='cd ~/Documents/GitHub/dir3 && open . && atom .'

这是初始代码:

# Git Directories Init
for d in ~/Documents/GitHub/*
do
    echo ${d##*/} && alias op_${d##*/}='cd $d && open . && atom .'
done

1 个答案:

答案 0 :(得分:0)

问题在于,您正在单引号$d上并将其扩展延迟到别名运行之前。您希望在定义别名时立即对其进行扩展。

在bash中,alias是一个内置的shell,它采用key=value形式的单个参数。 alias的单个参数在第一个=符号处分割,因此,如果您的目录包含=字符,则此脚本仍将起作用。

但是,如果其中一个目录中包含'字符,它将中断。

for d in ~/Documents/Github/*
do
    dir="${d##*/}"
    alias "op_${dir}=cd '$d' && open . && atom ."
done

由于cd将外壳程序移到新目录,在Finder中打开目录,并在Atom中打开它都是独立的事情,因此,我建议执行以下操作

for d in ~/Documents/Github/*
do
    dir="${d##*/}"
    alias "op_${dir}=cd '$d' && open '$d' && atom '$d'"
done