将别名从链接的命令传递给unalias

时间:2018-06-30 20:20:20

标签: bash

我要批量alias的文件中有unalias个定义的列表。

文件如下:

please=sudo
po='git push origin'

我已经走了这么远,但是我不确定如何将别名传递给unalias com

cat old.txt | cut -d = -f 1

2 个答案:

答案 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的字符串处理往往比通用工具要慢,但是这些工具通常还具有很大的启动时间成本,因此不希望在循环中运行)。

  • BashFAQ #1中记录了while read惯用法。设置IFS==意味着当看到=时我们分成几个字段;提供nameval意味着第一个字段进入name,而所有后续字段都进入val
  • [[ $var =~ $regex ]]执行POSIX ERE样式的正则表达式匹配。
  • ... <in.txtcat in.txt | ...更有效率,并且避免触发BashFAQ #24中描述的问题(将数据管道传送到循环中时可能发生)。

答案 1 :(得分:0)

这可以解决问题:

unalias $(cat old.txt | cut -d = -f 1)