我编写了一个简单的脚本来浏览我的开发项目目录并为每个目录添加一个别名快捷方式:
shopt -s dotglob #Use shopt -u dotglob to exclude hidden directories
find ~/development/* -prune -type d | while IFS= read -r d; do
cur_dir="${d##*/}"
cmd="alias ${cur_dir}=\"code $d\""
echo "executing: $cmd"
$cmd
done
输出如下所示:
executing: alias project-1="code /home/my_user/development/project-1"
./alias_for_projects.sh: line 6: alias: /home/my_user/development/project-1": not found
...
如果我复制并运行命令:
alias project-1="code /home/my_user/development/project-1"
它只是有效...我如何修复我的脚本?
答案1
你有两个问题:
跑起来很麻烦存储在变量中的命令。但您实际上并不需要将命令存储在变量中。你可以只做
alias "${cur_dir}"="code $d"
你跑的地方$cmd
。您正在
alias
子外壳中运行。 Bash 在子 shell 中运行管道命令(除非lastpipe
设置)。但你不需要管道(或find
两者都不需要)。您可以只使用常规的通配符(您已经在使用它,因此find
更没有意义)。
综合:
shopt -s dotglob
for d in ~/development/*/; do # trailing slash - only directories match
cur_dir="${d%/}" # strip trailing slash
cur_dir="${cur_dir##*/}"
alias "${cur_dir}"="code $d"
done
答案2
阅读所有评论后,我像这样修复了我的脚本:
shopt -s dotglob #Use shopt -u dotglob to exclude hidden directories
while IFS= read -r d; do
cur_dir="${d##*/}"
#echo "${cur_dir}"="code $d"
alias "${cur_dir}"="code $d"
done <<<$(find ~/development/* -prune -type d)