goo blog サービス終了のお知らせ 
goo

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
コメント ( 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
コメント ( 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 : アタッチ

とりあえず、ここまで。
コメント ( 0 )

bash .screenrc

escape ^Z^Z # Ctrl + z に変更
defkanji euc
hardstatus alwayslastline "%{= WB}%-w%{=u YR}%n %t%{-}%+w %=[%Y-%m-%d %02c:%s]"
コメント ( 0 )

bash ls --full-timeの指定

ls --full-timeってやると、秒数まで、出てくる・・・

いらんか
コメント ( 0 )
« 前ページ 次ページ »