bash - 使用 for 循环 (bash_profile) 创建别名
问题描述
我正在尝试在我的 .bash_profile 中创建一个 for 循环,以遍历我的 github 文件夹中的所有目录并创建一个别名以在项目工作区中打开。
我在下面有一个工作脚本,但是每个别名都绑定到最后一个结果。
例如,如果目录包含: dir1 dir2 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
解决方案
问题是您正在单引号$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
推荐阅读
- amazon-web-services - 如何根据用户 IP 启用 ALB 粘性
- ios - Windows 不支持 iOS 测试
- mongodb - Discord.js/Mongodb 如何更新所有数据库值
- python - 熊猫数据框明确找到NaN
- docker - Docker Container 中的 Vagrant 不起作用(尝试 lint Vagrantfiles)
- flutter - 如何在颤动的底部导航栏中垂直和水平地在中心添加一个按钮?
- windows - 在不超额订阅视频内存时,如何防止 SwapBuffers 被 Windows VidMm Eviction Paging 延迟?
- youtube-api - Youtube V3 数据 API - Channels.list 函数未获取所有频道
- json - 嵌套字典和列表/glom lib python
- gdb - 你能更新 MinGW 的独立组件吗?