我要批量alias
的文件中有unalias
个定义的列表。
文件如下:
please=sudo
po='git push origin'
我已经走了这么远,但是我不确定如何将别名传递给unalias
com
cat old.txt | cut -d = -f 1
答案 0 :(得分:4)
要允许输入文件包含注释,您可以执行以下操作:
while IFS== read -r name val; do
[[ $val ]] || continue # skip any line that didn't have a "="
[[ $name =~ [#] ]] && continue # skip any line that had a # anywhere before the "="
unalias "$name"
done <old.txt
这避免了依赖于外壳本身外部的任何工具-所有处理都是使用bash本机逻辑完成的。 (有时候这是对的,有时却不是-bash的字符串处理往往比通用工具要慢,但是这些工具通常还具有很大的启动时间成本,因此不希望在循环中运行)。>
while read
惯用法。设置IFS==
意味着当看到=
时我们分成几个字段;提供name
和val
意味着第一个字段进入name
,而所有后续字段都进入val
。[[ $var =~ $regex ]]
执行POSIX ERE样式的正则表达式匹配。 ... <in.txt
比cat in.txt | ...
更有效率,并且避免触发BashFAQ #24中描述的问题(将数据管道传送到循环中时可能发生)。答案 1 :(得分:0)
这可以解决问题:
unalias $(cat old.txt | cut -d = -f 1)