Bash 命令“读取”错误“不是标识符:-t”

Bash 命令“读取”错误“不是标识符:-t”

我在 /etc/profile 的末尾编写了这个非常简单的脚本:

    i=3
    let key
    while [ $i -gt 0 ] ; do
        printf "\rPress 'q' to prevent starting X ($i)"
        read -rsn 1 -t 1 key # THE PROBLEM IS HERE
        if [[ $? == 0 ]] ; then
            break;
        fi
        i=$[$i-1]
    done

    if [[ $key != "q" ]]; then
        printf "\nStarting X..."
        exec startx
    fi

该脚本允许我选择在登录时是否启动 X。当我自己执行该脚本时,该脚本可以按预期工作(没有“exec startx”)。但期间轮廓脚本执行停止于命令等待用户输入而没有超时,按任意键后我看到错误:“不是标识符:-t”。

答案1

这里可能有两个不同的问题:

  1. 您的配置文件无法使用 shebang 运行配置文件中的任何内容。必须获取配置文件,因为它们导出供登录 shell 使用的各种变量。如果 shebang 在配置文件中启动不同的 shell,那么当该脚本完成时,其效果将消失。任何子进程都不能影响其父进程的环境。
  2. 在执行您的配置文件时,您可能还没有打开可以侦听读取响应的终端。

相关内容