2016-08-04 3 views
-1

このようなシェルスクリプト(POSIX)を実行します。オプション-sを指定してシェルスクリプト(/ bin/sh)を作成し、内部で入力を読み取る方法

#!/bin/sh 
# this is a.sh 
echo your age? 
read age 
echo "You are $age." 

これは、その後、質問はスキップされ

cat a.sh | /bin/sh -s 

として、標準入力経由のbin/shを/にスローされます。

どのように質問できますか? cat a.shによって供給パイプ:

+0

「/ bin/sh a.sh」の代わりにこの方法で実行している理由はありますか?問題は 'a.sh'が標準入力を'/bin/sh'の呼び出しから継承し、その標準入力が 'a.sh'であることです。 '/ bin/sh'は1行目と2行目を読み込みますが、' read'文は3行目を読み込みます。 '/ bin/sh'が読み込む入力がなくなるので終了します。 – chepner

答えて

2

-nオプションを試してみてください。

解決策の1つは、標準入力ではなくを端末から直接読み取るようにスクリプトを修正することです。

echo "your age?" 
read age < /dev/tty 
echo "Your age $age" 

より良い解決策は、標準入力からスクリプトを読み取らないことです。 /bin/shの引数として渡してください。

/bin/sh a.sh 
-1

は、問題が/bin/shは、スクリプトを読んでいると、あなたのスクリプトは、同じ入力ファイルから、入力を読んでいるということである

echo -n "your age?" 
read age 
echo "Your age $age" 
関連する問題