
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VirtualBox 6.1 → 7.1 でUbuntu...
-
LinuxでWine使うとどのくらいWi...
-
Core 2 Duo の古いパソコンに最...
-
「トゥ]の出し方
-
WinSCPでLinux(CentOS6.10)に...
-
2TBのUSBメモリを2000円ほどで...
-
zorin OS
-
私のパソコンでVirtualBoxは使...
-
Linuxでブートディスクの交換後...
-
linuxのIMEの件
-
windows10を使っています。 wsl...
-
bashでシングルクォート内の変...
-
インストールできないですどう...
-
raspberrypi に bluealsaを入れ...
-
ubuntu 22日本語Remixのisoイメ...
-
LinuxのPCは基本不要PC中古を使...
-
Ububtuでファイル共有できない...
-
ubuntu(linux)のシャットダウン...
-
Lubuntuでとにかく軽量のバージ...
-
ubuntu 24 へのCanon 複合機ス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンド終了ステータス
-
実行中のシェルスクリプト自体...
-
OSがプログラムをどのように実...
-
UNIX Cシェルで実数の比較
-
デフォルトシェルの調べ方
-
cshの標準出力を制御したい
-
Bシェルでパイプ→exitがうまく...
-
telnet へのパイプができないです
-
Shellのパターンマッチについて
-
FTPコマンドの戻り値について
-
diskpart でパーティションの一...
-
Bシェル内でのユーザー変更
-
IFS変数について詳しい方教えて...
-
シェルの実行について
-
cygwinシェルスクリプト内での...
-
csh(Cシェル)のevalに関して
-
cshで変数名の入れ子ができない
-
vagrant upでエラーが表示され...
-
cronでftp自動転送を行いたい
-
Mac OSXのターミナルでemacsを起動
おすすめ情報