おぼえがき
おぼえがき
bash サブシェルと名前つきパイプ
こんなシェルを書いてた
MSG=""
awk ????? | head -50 |
while IFS=$'\t' read AAAA BBBB
do
MSG="${MSG}${AAAA}|${BBBB}|"
grep $BBBB ${ファイル} | awk 'BEGIN {FS="|";OFS="|"} {print $2,$3}' | sort | uniq |
while IFS="|" read CCCC DDDDD
do
MSG=${MSG}${CCCC}|${DDDD}|"
done
done
echo ${MSG}
ってな感じ。
MSGの中身は、何も入っていない・・・・
何でだ。。。
サブシェルが分かってないからこんなことではまる。
名前つきパイプで渡してやればいい。
while IFS=$'\t' read AAAA BBBB
do
MSG="${MSG}${AAAA}|${BBBB}|"
while IFS="|" read CCCC DDDDD
do
MSG=${MSG}${CCCC}|${DDDD}|"
done < <(grep $BBBB ${ファイル} | awk 'BEGIN {FS="|";OFS="|"} {print $2,$3}' | sort | uniq )
done < <(awk ????? | head -50)
echo ${MSG}
ってやればできる。
んーーサブシェルが良く分からん・・・
ここをしっかり理解しないと・・・・
http://search.luky.org/linux-users.9/msg06102.html
MSG=""
awk ????? | head -50 |
while IFS=$'\t' read AAAA BBBB
do
MSG="${MSG}${AAAA}|${BBBB}|"
grep $BBBB ${ファイル} | awk 'BEGIN {FS="|";OFS="|"} {print $2,$3}' | sort | uniq |
while IFS="|" read CCCC DDDDD
do
MSG=${MSG}${CCCC}|${DDDD}|"
done
done
echo ${MSG}
ってな感じ。
MSGの中身は、何も入っていない・・・・
何でだ。。。
サブシェルが分かってないからこんなことではまる。
名前つきパイプで渡してやればいい。
while IFS=$'\t' read AAAA BBBB
do
MSG="${MSG}${AAAA}|${BBBB}|"
while IFS="|" read CCCC DDDDD
do
MSG=${MSG}${CCCC}|${DDDD}|"
done < <(grep $BBBB ${ファイル} | awk 'BEGIN {FS="|";OFS="|"} {print $2,$3}' | sort | uniq )
done < <(awk ????? | head -50)
echo ${MSG}
ってやればできる。
んーーサブシェルが良く分からん・・・
ここをしっかり理解しないと・・・・
http://search.luky.org/linux-users.9/msg06102.html
コメント ( 0 )
bash $*と$@の違い
$*
シェルの予約変数IFSに値をセットしておくと、区切り文字を変更することができます。この場合はダブルクオーテーション(")で囲む必要があります。例えば以下のように使用できます。
$ IFS=:
$ echo "$*"
a:b:c:d
$@
上記「$*」とほとんど同じですが、予約変数「IFS」の影響は受けません。つねに区切り文字は空白です。
上記「@」と「*」は上記で紹介したbash version2.0 の機能である配列変数にも応用できます。
$ IFS=:
$ array=(a b c d)
$ echo "${array[*]}"
a:b:c:d
$ echo "${array[@]}
a b c d
シェルの予約変数IFSに値をセットしておくと、区切り文字を変更することができます。この場合はダブルクオーテーション(")で囲む必要があります。例えば以下のように使用できます。
$ IFS=:
$ echo "$*"
a:b:c:d
$@
上記「$*」とほとんど同じですが、予約変数「IFS」の影響は受けません。つねに区切り文字は空白です。
上記「@」と「*」は上記で紹介したbash version2.0 の機能である配列変数にも応用できます。
$ IFS=:
$ array=(a b c d)
$ echo "${array[*]}"
a:b:c:d
$ echo "${array[@]}
a b c d
コメント ( 0 )
bash screenを覚える
screenを覚える
screen : コマンド開始
C-a c : 窓追加
C-a A : 窓名セット
C-a w : 窓名リスト表示(画面上部)
C-a " : 窓名リスト表示(選択型)
C-a n : 窓移動
C-a p : 窓移動
C-a [ : バッファの閲覧(C-bで戻れたりする)
C-a ? : 番号をうって、窓の移動
--- 分割 ---
C-a S : 2分割
C-a Tab : 分割先に移動
C-a X : 今の窓を閉じる
C-a Q :現在の窓以外閉じる
-- デタッチ・アタッチ --
C-r d : デタッチ
C-r x : アタッチ
とりあえず、ここまで。
screen : コマンド開始
C-a c : 窓追加
C-a A : 窓名セット
C-a w : 窓名リスト表示(画面上部)
C-a " : 窓名リスト表示(選択型)
C-a n : 窓移動
C-a p : 窓移動
C-a [ : バッファの閲覧(C-bで戻れたりする)
C-a ? : 番号をうって、窓の移動
--- 分割 ---
C-a S : 2分割
C-a Tab : 分割先に移動
C-a X : 今の窓を閉じる
C-a Q :現在の窓以外閉じる
-- デタッチ・アタッチ --
C-r d : デタッチ
C-r x : アタッチ
とりあえず、ここまで。
コメント ( 0 )
bash .screenrc
escape ^Z^Z # Ctrl + z に変更
defkanji euc
hardstatus alwayslastline "%{= WB}%-w%{=u YR}%n %t%{-}%+w %=[%Y-%m-%d %02c:%s]"
defkanji euc
hardstatus alwayslastline "%{= WB}%-w%{=u YR}%n %t%{-}%+w %=[%Y-%m-%d %02c:%s]"
コメント ( 0 )
« 前ページ | 次ページ » |