根据条件修改 bash 命令的函数

function to modify bash command based on condition

函数的当前状态如下:

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 [=11=]" "$@
    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.

在给定的代码中如果我用 eval 替换 echo,它会关闭终端。我该怎么办?

你不需要使用 echo 所以:

echo "g d rm --cached -r ~" 

应该是:

g d rm --cached -r ~

等在最后一种情况下,您可以 运行

bash -c [=12=]" "$@