![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
Bシェルで、下記のようにパイプの中でexitすることでスクリプトを終了させようとしたのですが、パイプした処理を抜けるだけexit 1 のところでスクリプトが終了せず、whileループの後のexit 0のところまで行ってスクリプトが終了しました。
パイプの中でexitすると、パイプの外に出るだけになるのでしょうか?
どうすれば、パイプの中でスクリプトを終了させることができるのでしょうか?
#! /bin/sh
cat /tmp/tmp.dat |
while read LINE
do
LL=LINE
exit 1
done
echo $LINE
exit 0
また、これとは別に、変数LLに$LINEを代入して、その後LLをechoすると、$LINEの内容が出ると思ったら、中が空になっているようで何も出力されませんでした。
これを回避して、LLにLINEの内容を保存するような処理をしたいのですが、どうすればいいでしょうか?
以上、よろしくお願いします。
No.3
- 回答日時:
本質的ではないですが、
LL=LINE
ではなくて、
LL="$LINE"
ですね。
No.2
- 回答日時:
>done < /tmp/tmp.dat
>の形でもやってみましたが、exitできず、whileループを抜けるだけの形になってしまいました。
どういうスクリプトになったのですか?
No.1の方が書かれたスクリプトのwhileループ内のbreakをexitに変えればご希望の動作になると思うのですが。
-------8<-------8<-------8<-------8<-------
$ cat test.sh
#! /bin/sh
while read LINE
do
LL=LINE
exit 1
done < /tmp/tmp.dat
echo $LINE
exit 0
$ ./test.sh
$ echo $?
1
$ sh -x ./test.sh
+ read LINE
+ LL=LINE
+ exit 1
-------8<-------8<-------8<-------8<-------
この回答への補足
回答ありがとうござます。
そのように記述したスクリプトを実行したのですが、
exitでスクリプトが終了せず、breakと同じような動作をしました。
回答に貼り付けていただいた実行結果はどのような環境で実行されたのでしょうか?
No.1
- 回答日時:
パイプは別プロセスを作ることで実現されていますから、そういう仕様です。
質問文のスクリプトの場合はパイプを使う必然性はないので、使わなければ済むと思いますよ。
#! /bin/sh
while read LINE
do
LL=LINE
break
done < /tmp/tmp.dat
echo $LINE
exit 0
この回答への補足
回答ありがとうございます。
ご教示いただいた
done < /tmp/tmp.dat
の形でもやってみましたが、exitできず、whileループを抜けるだけの形になってしまいました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- UNIX・Linux デフォルト値のパラメータ展開 1 2022/08/12 17:34
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) マクロのコードを、少しでも削って短くしたい 3 2022/08/30 07:46
- DIY・エクステリア 塩ビパイプ接続方法 4 2023/05/21 05:39
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Visual Basic(VBA) ExcelVBA No.を自動連番で設定をしながらデータ入力をしたい 2 2022/08/03 18:19
- 日用品・生活雑貨 こういうパイプの使い方を教えてください 7 2023/02/05 20:27
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンド終了ステータス
-
cronでftp自動転送を行いたい
-
FTPコマンドの戻り値について
-
diskpart でパーティションの一...
-
Bシェルでパイプ→exitがうまく...
-
Linuxのシェルスクリプトをお客...
-
Viで書き込もうとすると、保...
-
/ が何時の間にか「Read-only f...
-
DOSコマンドでのワイルドカ...
-
Solarisが起動しなくなった・・・
-
Illustratorのデータをまとめて...
-
書き込み権限が無いためコピー...
-
FTP接続中のコマンド実行結果を...
-
ウィンドウズお自動起動後、ラ...
-
/etc/passwd と /etc/shadowを...
-
Linuxのユーザーのパスワードを...
-
CGIでの環境変数PERL5LIBの設定
-
scpコマンドでリモートサーバの...
-
メールサーバの/var/spool/mail...
-
tr -d \\" < filename.csv は間...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
FTPコマンドの戻り値について
-
複数の処理を順番にログアウト...
-
diskpart でパーティションの一...
-
lsコマンドの色設定が反映されない
-
telnet へのパイプができないです
-
実行中のシェルスクリプト自体...
-
cshで変数名の入れ子ができない
-
空白を含んだシェル変数の代入
-
cronでftp自動転送を行いたい
-
UNIX Cシェルで実数の比較
-
cronでaws_s3にデータを格納す...
-
csh(Cシェル)のevalに関して
-
kshでのcase文条件範囲について
-
cygwinシェルスクリプト内での...
-
vagrant upでエラーが表示され...
-
メニュー画面よりコマンド実行...
-
リモートシェルでファイルをroo...
-
vi利用時でのbeep音の消し方
-
シェルの -eq の動作について
おすすめ情報