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