代码之家  ›  专栏  ›  技术社区  ›  BLambert

.zshrc脚本无法执行

zsh
  •  0
  • BLambert  · 技术社区  · 1 年前

    厌倦了必须手动输入git命令才能一次又一次地获取最新信息,我将此脚本添加到VSCode中的.zshrc文件中,以便为我处理该过程。

    gitLatest()
    {
        git status
        echo "This action will overwrite any uncommitted changes. Are you sure? (y/n): "
        read -e overwrite
     
        if [[ "$overwrite" == "y" ]] ; then
            git checkout main
            git fetch
            git reset --hard origin/main
        fi
    }
    

    当我运行脚本时,会显示方向,并在提示下输入“y”。重新打印“y”,脚本终止。

    我已经尝试过根据博客文章和SO文章以多种方式重新格式化if语句部分,这些文章似乎与触发逻辑有着明显的联系,但到目前为止,没有任何操作进入if语句。

    1 回复  |  直到 1 年前
        1
  •  0
  •   Gairfowl    1 年前

    的文档 read 很难找到;在里面 man zshbuiltins 。它有这样的注释:

    -e -E 输入读数被打印(回显)到标准输出。如果 e 标志,则不向参数分配任何输入。

    因此,没有向分配任何内容 overwrite 变量 E 应该工作:

    > read -e var   
    qwerty
    qwerty
    > typeset -p var
    typeset: no such variable: var
    > read -E var
    asdf
    asdf
    > typeset -p var
    typeset var=asdf
    > if [[ $var == asdf ]] print YES
    YES
    

    这个 -q 的选项 阅读 支持另一种生成确认提示的方式:

    q 从终端只读取一个字符,如果该字符是y或y,则将name设置为y,否则设置为n。设置此标志后,仅当字符为y或y时,返回状态为零。此选项可与超时一起使用(请参阅 -t ); 如果读取超时,或遇到文件结尾,则返回状态2。。。

    现在无需点击return:

    > if read -q 'var?overwrite (y/n)?'; then
    then> print;print "as you wish"
    then> fi
    overwrite (y/n)?y
    as you wish