如何解决函数根据条件修改bash命令
函数的当前状态如下:
function git() {
if [[ $@ =~ ^"d untrack-all" ]]
then
echo "g d rm --cached -r ~"
elif [[ $@ =~ ^"d add-and-commit" ]]
then
echo "g d add ~ && g d commit -am \"$_\""
elif [[ $@ =~ ^"d sb" ]]
then
echo "git d branch | rofi -dmenu | xargs git checkout"
elif [[ $@ =~ ^"d stash-and-reset" ]]
then
echo "git d stash && git d reset --hard HEAD"
elif [[ $@ =~ ^"d last" ]]
then
echo "git d --no-pager log -1 --oneline"
else
echo $0" "$@
fi
}
我期望的是
如果我运行命令git d untrack-all
,它将实际上运行g d rm --cached -r ~
如果我运行命令git d add-and-commit
,它将实际上运行g d add ~ && g d commit -am \"$_\"
...
如果模式不匹配,它将按原样运行命令。例如,如果我运行git status
,它将运行git status
。
在给定的编解码器中如果将echo
替换为eval
,它将关闭终端。我该怎么办?
解决方法
您无需使用echo,因此:
echo "g d rm --cached -r ~"
应为:
g d rm --cached -r ~
等在最后一种情况下,您可以运行
bash -c $0" "$@
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。