当我正在研究如何表达这个问题时,我想出了答案,但它可能对某些人有用。我使用zsh,我的.zshrc和我的.bashrc都有source $HOME/.alias
。这是旧的,有问题的~/.alias
rl() { grep -v "$1" "$2" > /tmp/rl.txt && mv /tmp/rl.txt "$2" }
...
它在zsh中工作正常,但是在bash中我遇到意外的文件错误结束,rl
未定义。
答案 0 :(得分:2)
在zsh和bash中都有效的固定~/.alias
是
rl() { grep -v "$1" "$2" > /tmp/rl.txt && mv /tmp/rl.txt "$2"; }
...
Bash在单行函数声明中的最后一个命令之后只需要一个分号。
答案 1 :(得分:2)
您可以在函数中使用sed
,以避免复制文件,然后将其移动到原始文件上。
rl() { sed -i -e "/$1/d" "$2"; }
-i
标记就地编辑文件文件,如果提供扩展名,则进行备份。没有扩展,它只是就地编辑。