ファイルを作成し、次のシェル順にアクセス権を定義しますcom
。fic
$ cat com
if tty>/dev/null
then read x
else read x<fic
fi
echo $x
$ cat fic
abcd
$ ls -l com fic
-r-xr-xr-x 1 jmr ens 70 Jan 22 09:41 com
-r--r--r-- 1 jmr ens 5 Jan 22 09:41 fic
$
echo $x
起動時に(フォアグラウンドで)停止するのはなぜですか?読まなければならcom
ないのではないかfic
?
答え1
if tty>/dev/null ; then
read x
else
read x<fic
fi
つまり、fic
エラーが返された場合にのみ読み取られます。tty
これは端末ではないことがわかったときに発生stdin
します。通常、これはスクリプトがパイプラインにある場合、またはnohup
cronジョブを介してまたはリモートで実行されたときに発生しますssh -T
。
条件付きで使用することは[ -t 0 ]
ほぼ同じです([
現在akaが一般的に組み込まれているので、より高速です)。test
答え2
com シェルスクリプトがフォアグラウンドで実行されるとread
実際のtty
。
行を入力すると、そのread
行が終了し、その行が変数に設定されますx
。