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
アプローチを考え直す必要があるようです。