コマンドラインで読み取りが機能し、nohupを介して実行されるスクリプトでは失敗します。

コマンドラインで読み取りが機能し、nohupを介して実行されるスクリプトでは失敗します。
read -t 600 -p 'Please specify the format in which you wish to export the file. csv/gz by entering (1/2)?' file_format 

上記のコマンドはコマンドラインで実行されますが、それを介して起動されたシェルスクリプトで同じコマンドを実行すると、次のnohup ./script_name with_paramas > out_fileエラーで失敗します。

copy_to_gds.sh: line 26: read: read error: 0: Bad file descriptor

ベストアンサー1

これは次のように再現できます。

$ nohup bash -c 'read var' | cat
nohup: ignoring input and redirecting stderr to stdout
bash: line 0: read: read error: 0: Bad file descriptor

マンページには次のように記載されていますnohup(強調)。

標準入力が端末の場合は、以下からコピーしてください。読めないファイル

nohup/dev/null開いてこれをするただ書くモードを選択し、標準入力をfd 0にコピーしてリダイレクトします。したがって、EBADF"Bad file descriptor")エラーが発生します。スクリプトが試しているからです。読む書き込み専用モードで開いたファイルから:

$ read var 0>/dev/null
bash: read: read error: 0: Bad file descriptor

viaを実行しているスクリプトからユーザー入力を取得しようとすることはreadほとんど意味がないので、nohupアプローチを考え直す必要があるようです。

おすすめ記事