タグ

bashに関するy-kawazのブックマーク (12)

  • bashのビルトインコマンドメモ - Qiita

    $ help time time: time [-p] PIPELINE Execute PIPELINE and print a summary of the real time, user CPU time, and system CPU time spent executing PIPELINE when it terminates. The return status is the return status of PIPELINE. The `-p' option prints the timing summary in a slightly different format. This uses the value of the TIMEFORMAT variable as the output format. times: times Print the accumulate

    bashのビルトインコマンドメモ - Qiita
    y-kawaz
    y-kawaz 2013/05/17
    ビルトインコマンドのヘルプがhelpで見れるの知ってたのに知らんかったww(存在忘れてた)!いつもman bashして目的のbuildin command探してスクロールしてたわ自分はアホやった…orz
  • readするときはIFS=を付けておくとstrictな感じで気持ちが良い - Qiita

    while readするならwhile IFS= readした方が良いかもよっていう話です。 説明は後にして、まずはlsしたファイル名をechoする例で違いを見てみます。 $ touch " abc " "ho ge" $'\txyz' #3つのファイルを作成します ## 普通にwhile readした場合 $ ls | while read f; do echo "[$f]"; done [xyz] [abc] [ho ge] ## IFS= を付けた場合 $ ls | while IFS= read f; do echo "[$f]"; done [ xyz] [ abc ] [ho ge] 違いは一目瞭然ですね。単にreadをした場合は、前後のタブや空白が全て消えてしまっていますが、IFS= をつけた場合はタブや空白もオリジナルのまま読み込めています。ちなみに ho ge の間は空白

    readするときはIFS=を付けておくとstrictな感じで気持ちが良い - Qiita
    y-kawaz
    y-kawaz 2013/03/31
    シェルスクリプトでIFSを意識するようになると暗黙のアレな気持ち悪さが排除出来て頭がスッキリする。
  • パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方 - Qiita

    これはコマンドの標準出力を1行ずつ f という変数に読み込んで何らかの処理を行うってやつです。 whileの中でやることがファイル操作などの一般的なことならこれで全然問題ないんですが、実行中のシェル環境に対する処理(具体的には変数の設定など)を行おうとすると期待通りにいってくれなくなります。例えばこんな感じ↓ # findで見つけたファイル名をfilesという配列変数に詰め込みたい files=() find -type f | while read -r f; do files+=("$f") done echo "${files[@]}" # 確かにfilesに値を入れた筈なのに空が出力される?? これはパイプで繋げると後ろのwhileがサブシェルで実行されてしまうために起こる現象です。噛み砕いて説明すると… 現在findを実行中のbashとは別に、パイプの後ろでもう一つのbashが起

    パイプ出力を現在のシェル上のwhileに喰わせる上手いやり方 - Qiita
    y-kawaz
    y-kawaz 2013/03/31
    長年の悩みが解決したのでメモった。
  • Bash Hackers Wiki Frontpage [Bash Hackers Wiki]

    y-kawaz
    y-kawaz 2013/03/29
  • Shellでgetoptsを使ってコマンドライン引数の解析 - oinume journal

    だいぶ前の話、Perlを使わないでShellスクリプトで頑張っていた頃、Shellでコマンドラインオプションの解析をやる時は #!/bin/sh for OPT in $* do case $OPT in '-x' ) FLAG_X="TRUE" ;; '-y' ) shift FLAG_Y="TRUE" VALUE_Y=$1 ;; esac shift done if [ "$FLAG_X" = "TRUE" ]; then echo "Option -x specified." fi if [ "$FLAG_Y" = "TRUE" ]; then echo "Option -y $VALUE_Y specified." fi という感じで $* と shift を使ってやっていたのですが、最近 getopts なる素敵なビルトインコマンドを知りました。これを使うと上のスクリプトは下のよ

    Shellでgetoptsを使ってコマンドライン引数の解析 - oinume journal
  • bash,dash,mkshの互換性 - 「希望」という字が好き

    §クォート sh <<\eof printf "%s\n" $"0" eof bash mksh 0が返る。 dash $0が返る。 $"string"に未対応。 sh <<\eof printf "%s\n" $'\60' eof bash mksh 0が返る。 dash $\60が返る。 $'string'に未対応。 sh <<\eof printf "%s\n" "${$+$'\60'}" eof bash 0が返る。 set -o posixとすると、$'\60'が返る。 dash $'\60'が返る。 $'string'に未対応。 mksh 0が返る。 §パラメータと変数 sh <<\eof echo ${@-0}${@+1} eof bash mksh 0が返る。 位置パラメータが存在しないときは未定義。 dash 1が返る。 位置パラメータが存在しないときは空文字列。 sh

    y-kawaz
    y-kawaz 2012/11/16
    すげー。かなり変態的な書式を色々試してて参考になる。
  • Advanced Bash-Scripting Guide

    This tutorial assumes no previous knowledge of scripting or programming, yet progresses rapidly toward an intermediate/advanced level of instruction . . . all the while sneaking in little nuggets of UNIX® wisdom and lore. It serves as a textbook, a manual for self-study, and as a reference and source of knowledge on shell scripting techniques. The exercises and heavily-commented examples invite ac

    y-kawaz
    y-kawaz 2012/05/24
  • bashによるシェルスクリプトの小技(2) - shibainu55日記

    前回(bashによるシェルスクリプトの小技(1))に引き続き、シェルによって自動的に値が設定される特殊な変数について紹介する。特殊な変数を参照することにより、様々な情報を取得することができる(ただし、これらの変数には自分で任意の値を設定することはできない)。 さて、まずは特殊変数を一覧でまとめてみる。お馴染みのものが多いが、最後の2つ(特に最後のPIPESTATUS)についてはきっと今まで知らなかった人もいるんじゃないだろうか。シェルの中でパイプすると途中のコマンドのリターンコード、拾えないとか思っていませんか?今回のポイントとしては、「1. PIPESTATUS変数について」と「2. 特殊変数 $@と$*の違いについて」の2点を主に説明する。 特殊変数一覧表 変数名 自動的に設定される値 $? 直前に実行されたコマンドの終了ステータスが設定される変数。正常終了の場合は「0」、異常終了の場

    bashによるシェルスクリプトの小技(2) - shibainu55日記
    y-kawaz
    y-kawaz 2012/05/24
  • Bash変態文法最速マスター

    注意このドキュメントは、すでにshまたはbashでそれなりにスクリプトを書いている人向けに書かれています。自分が対象読者でないと思ったら、すっぱりと読むのをあきらめてください。時間の無駄です。 このドキュメントではBash version 3.x 系(3.1以降) 4.x 系を対象にしています。2.x 系だと微妙に文法が違うところがあるので注意してください。ちなみに 4.x 系だと、変態なことをしなくても同じことができたり(連想配列が使えるようになったはず)、逆にもっと変態なことができたりします。(2013/09/11 追記) 書きかけで放置している間にメイン環境が 4.x になりました。3.x と 4.x でどこが違うかもう覚えてないし調べるのも面倒なので 4.x 系前提でいきます。 このドキュメントは、主にPOSIXなshにはないBashの機能を使い倒すことを目的としています。ここにあ

    y-kawaz
    y-kawaz 2012/03/08
  • DevQuizのOAuthのソース晒すよ

  • bashの配列変数に関するTips - y-kawazの日記

    序文(飛ばしてよし) まず話は僕が書いてたスクリプトで、引数から"最後の"値だけを分離したものを使いたかったってのが始まりです。 最初の引数の分離なら shift でいけるんだが、最後をいきなり分離するのが直接は出来ないっぽいので、格闘の結果以下のように解決しました。 #!/bin/sh ARGS=("$@") echo "最後以外: ${ARGS[@]:0:((${#ARGS[@]}-1))}" echo "最後のみ: ${ARGS[((${#ARGS[@]}-1))]}" echo "最後のみ: ${ARGS[-1]}" # bash-4.2 以降なら負のインデックスが使える! 以下が上記スクリプトの実行結果です。 $ ./test.sh a b c d 最後以外: a b c 最後のみ: d やっていることは、まず引数をARGVという配列変数に詰めなおして、その後配列変数に対するスラ

    bashの配列変数に関するTips - y-kawazの日記
    y-kawaz
    y-kawaz 2010/07/20
    bashの配列変数に関するTipsを纏めてみた
  • Stray Penguin - Linux Memo (BASH)

    exp で 1文字を対象にしたいのであれば ?([a-f]) のようにクラスを併用することも可能。必ずしも `|' を使わなければならないわけではない。また、正規表現は ?(bash@(ref)) のように入れ子にすることもできる。 Bashで正規表現(2) ([[ =~ ]]オペレータ) 二重の `[[' を使い比較演算子に `=~' を使うと、右辺は拡張正規表現とみなされる。前項とは異なりこちらは物の正規表現だ。面白いのは、マッチ部分が BASH_REMATCH という配列にアサインされるという点。 VAR=$(LANG=C date +'%c') # VAR='Wed Dec 22 22:51:41 2010' DAYOFWEEK=Wed PATTERN='^'$DAYOFWEEK' ([[:alpha:]]{3}) [[:digit:]]{2} ([0-9:]+)' [[ $VA

  • 1