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

これには2つの異なる問題がある可能性があります。

  1. あなたのプロフィールはShebanを使用してプロフィールのどれも実行することはできません。設定ファイルはログインシェルで使用されるさまざまな変数をエクスポートするため、取得する必要があります。 shebangが設定ファイルから別のシェルを起動すると、スクリプトが完了するとその効果は消えます。どの子プロセスも親プロセスの環境に影響を与えることはできません。
  2. プロファイルの実行時に応答を受信できる端末が開いていない可能性があります。

関連情報