# while read -r _r; do true; done < /etc/passwd
# echo $?
0
# while read -r _r; do true; done < /etc/passwd
# echo ${PIPESTATUS[@]}
1
# while read -r _r; do true; done < /etc/passwd1
-bash: /etc/passwd1: そのようなファイルやディレクトリはありません
# echo $?
1
# while read -r _r; do true; done < /etc/passwd1
-bash: /etc/passwd1: そのようなファイルやディレクトリはありません
# echo ${PIPESTATUS[@]}
0
「Bash」タグアーカイブ
要注意 grep
コマンドライン上で気軽に使うには問題ないが,シェルスクリプト内で使用する時は要注意.(考えてみれば,シェルスクリプト内で grep を使用することがほとんどなくなってきた…)
典型的な問題
$ cat DATA
LINE1
LINE2
LINE3
DATA というファイルの内容に LINE2 という内容が含まれていたらある「処理」を行うという動作をするプログラムは,以下のように書くことはできる.
grep -q LINE2 DATA && <処理>
が,DATA が以下のような内容になっても,「処理」が走ってしまう.(これはほとんどの場合,そうなっては欲しくないだろう)
$ cat DATA
LINE1
LINE8
LINE16
LINE24
LINE32
データによってプログラムの挙動が意図しないものになってしまう典型となるので,grep は便利だがここでは使うべきではない.
POSIX シェルの PID の話
PPID がサブシェルの中でも一緒というのは…なんとかならんものか.ジョブコントロールについて結構気にしている割には,プロセス番号をうまく知る術がないというのはちょっといただけないと,思うのだが….BASH の場合は BASHPID というのを用意してくれているというのに.
なお jobs ユーティリティは,あくまでバックグラウンド実行したプロセスを表示するもので…ただ,バックグラウンド実行した以外のものを気にしないといけないかというと,それは…ないのか?フォアグラウンド実行中のものは制御せずとも(制御主体なので).
Highlighting Code Block
投稿内にプログラムコードの表示を行いたいので,Highlighting Code Block プラグインをインストールしてみた.
どのように使うか?「/」では Highlighting Code Block は選べない.画面右上の「+」を選ぶと,Highlighting Code Block が出てきて,それを選ぶと「Your Code…」と入ったブロックが表示された.カーソルを持っていくと,「- lang select -」でプログラム言語の選択肢が表示される – Bash もある!「ファイル名」を入力する欄もある.「data-line 属性値」とは?なるほど.行番号を指定するとそこがハイライトされるのか…_ん,効かないが??
#!/bin/bash
string="Hello World!"
printf "%s¥n" "$string"
exit 0
# bottom of file
と思ったら,プレビューしてみるとちゃんと効いている.行番号の表示も OK だ.