タグ

bashに関するmasudaKのブックマーク (38)

  • bashの組込みコマンド自作によるスクリプトの高速化 - Qiita

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - Qiita
    masudaK
    masudaK 2017/01/18
    やろうとはしないけど、面白い
  • bashの配列のまとめ(定義・代入・参照と取得・ループ) - それマグで!

    bash も配列を扱える シェルスクリプトで配列を扱えるので 配列を扱ってみる。 今回は、サンプルのために、変数名を大文字にしています。もちろん小文字も使えます。 大文字は、おもに環境変数やスクリプト間やプロセス間で値を渡すときに使うことが多いようです。 配列の定義 配列の定義には基的に2つあります。 bash の配列の定義の例 declare ARR=() declare -a ARR # または arr=() #無精する場合 配列の定義を改行する場合は、文字列でクォートが手っ取り早い。 arr=("a b c ") 配列の削除 定義した配列は削除できます。 unset -v ARR unset -v ARR[@] # または unset -v ARR[*] # または 配列の初期値を指定した宣言 初期値を指定した宣言をすることで明確になります。 ARR=( a b c d e ) 区

    bashの配列のまとめ(定義・代入・参照と取得・ループ) - それマグで!
    masudaK
    masudaK 2017/01/13
  • aabbdd

    農学生命情報科学特論 I @東京大学アグリバイオインフォマティクス教育研究ユニット (2022-06) プログラミング言語未経験者を対象とした Python 入門講義。農学や分子生物学などの分野で利用される Python の最新事例を紹介しながら、Python の基礎文法の講義を行う。 AI in Japan (Artificial Intelligence Develop for Thai Industry Camp) @ Mahidol University (2022-04) Introduction to AI in Japanese agriculture. Most slides were deleted due to copyright.

    masudaK
    masudaK 2017/01/13
  • シェルスクリプトでの$@の罠

    B! 39 0 0 0 シェルスクリプトを書いてる時に$@を使って ハマったのでそれについて。 $@と$* -fや-dの罠 まとめ $@と$* $@はシェルスクリプト 1 ではスクリプトや関数の中で全ての引数を表します。 $ f(){ echo $@;} $ f a b c a b c な感じ。 ここで、次の様なスクリプトを考えてみます。 atmark.sh 1 2 3 4 5 6 #!/usr/bin/env bash if [ "$@" != "" ];then echo "$@" else echo empty fi これを実行してみると $ ./atmark.sh a a $ ./atmark.sh ./atmark.sh: line 2: [: unary operator expected empty! $ ./atmark.sh a b ./atmark.sh: line 2

    シェルスクリプトでの$@の罠
    masudaK
    masudaK 2017/01/13
    $@と$※は一緒だと思ってたけど、違うんだな。@のほうを使うのはやめておいたほうが良さそう。
  • シェルスクリプトの処理境界が鮮明になる「名前付きブロック記法」なるものを考えてみた

    シェルスクリプトは長くなると処理の境界が不鮮明になりがち。 コメントで処理の境界を表現する工夫はよく見かけるが、もっと良い方法はないか考えてみた。 :コマンド、&&演算子、複合コマンド()や{}を組み合わせて書くと、処理の境界線がはっきりする。

    シェルスクリプトの処理境界が鮮明になる「名前付きブロック記法」なるものを考えてみた
    masudaK
    masudaK 2016/03/29
    なんで関数にしないんだろう
  • サービス終了のお知らせ

    サービス終了のお知らせ いつもYahoo! JAPANのサービスをご利用いただき誠にありがとうございます。 お客様がアクセスされたサービスは日までにサービスを終了いたしました。 今後ともYahoo! JAPANのサービスをご愛顧くださいますよう、よろしくお願いいたします。

  • "set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - 元RX-7乗りの適当な日々

    「シェルスクリプトの実行過程でエラーが発生した場合に処理を止めたい」・・・それをすごくシンプル(簡単)に実現したい場合に使えます。 例えば、以下のようなシェルスクリプトを書いた場合、、、 #!/bin/sh mkdir /tmp/hoge/fuga touch /tmp/hoge/fuga/test.txt 実行結果は以下のようになります。 $ ./test.sh mkdir: ディレクトリ `/tmp/hoge/fuga' を作成できません: そのようなファイルやディレクトリはありません touch: `/tmp/hoge/fuga/test.txt'にtouchできませんでした: そのようなファイルやディレクトリはありません/tmp/hogeディレクトリが存在しないので、/tmp/hoge/fugaのmkdirでこけます。まぁ普通ですよね。。。 が、何も考えずに書くと、↑のように、その

    "set -e": 実行コマンドが0以外の終了コードの場合、シェルスクリプトを終了する - 元RX-7乗りの適当な日々
    masudaK
    masudaK 2014/08/21
    追記のところがすごく大事だと思うのです。
  • マニュアルオペレーションするとき気を付けたいこといくつか - ふり返る暇なんて無いね

    少し思うところがあったのでメモ。 ほぼ自己流なので、もっと良いのがあれば教えて欲しいところ。 そもそもマニュアルオペレーション(手作業)するな ごもっとも。でもやらないといけない深淵な事情があるんです。 事前条件と事後条件を明確にしておく どういう状態からどういう状態に変わるべきか事前に明確にしておくべきです。 それなしに普通は作業しません。 切り戻し手順を考えておく 途中でミスる可能性があるポイントを明確にしておくこと。 それぞれのタイミングでの切り戻し手順をしっかり考えておくこと 作業手順を事前に書く オペレーション中にアドホックに手順考えないですよね? 複数手順あるならスクリプト化する できる限りステップを減らします。可能ならスクリプトを一発叩くだけにします。 set -eu は付けた方がいい eオプションはコマンドのステータスコードが0以外(異常終了)したときに、その時点で終了して

    マニュアルオペレーションするとき気を付けたいこといくつか - ふり返る暇なんて無いね
    masudaK
    masudaK 2014/08/18
    set -eは利用する処理によっては事故にもなりかねないから、ちゃんと確認した方がいい気がする。人様が作ったオレオレスクリプトとか。うまくいってると思っているのに、必ずしも0返してくれるとは限らない。
  • bashの正規表現マッチングの使い方 - adsaria mood

    あるフリーウェアのインストール用bashプログラムを見ていたら次の様なものがあった。(以下の例は簡略化してある。) STRING="abc" if [[ "$STRING" =~ "^ab[cd]$" ]]; then echo "matched" else echo "unmatched" fi if文の条件表現の中に“=~”というオペレータがある。manを見ると =~ オペレータは文字列を正規表現と比較するとある。知らなかった。bashの文字列比較で正規表現が使えるとは。私は正規表現比較が必要な時はgrepに喰わせて判断していたのだが、これを使えば簡単にできる。 ところが、だ。上のプログラムが期待通りに動かない。上の例では =~ の左辺と右辺の正規表現はマッチするはずだが、結果は“unmatched”。色々と正規表現を変えてみたが、どれとしてマッチングしない。しかし、if文を次のように

    bashの正規表現マッチングの使い方 - adsaria mood
    masudaK
    masudaK 2012/11/17
  • mac osx で bashの補完機能を有効にした話(homebrew経由) - 256bitの殺人メニュー

    はい、おつカレー様です。くわのです。 作業環境がMacになってきたのでその辺忘れないように書くなり。 みんなzshだzshだとかいうんですが、まあ色々覚えるのめんどくさくてw zshってどんだけ便利なのか説教してくれる人を募集しています。 とりあえずbashでも補完機能あるので、これでいってみましょ。 homebrewインストール homebrewは様々なパッケージを簡単にインストールできるやつです。 今ならmacportsはプークスクスらしいのでhomebrewのビックウェーブに乗ります。 mkdir ~/homebrew curl -L https://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C ~/homebrew終わり。 bash 補完のインストール homebrewでbash_completionとし

    mac osx で bashの補完機能を有効にした話(homebrew経由) - 256bitの殺人メニュー
    masudaK
    masudaK 2012/10/18
  • blog.paz-para.com – このドメインはお名前.comで取得されています。

    このドメインは お名前.com から取得されました。 お名前.com は GMOインターネットグループ(株) が運営する国内シェアNo.1のドメイン登録サービスです。 ※表示価格は、全て税込です。 ※サービス品質維持のため、一時的に対象となる料金へ一定割合の「サービス維持調整費」を加算させていただきます。 ※1 「国内シェア」は、ICANN(インターネットのドメイン名などの資源を管理する非営利団体)の公表数値をもとに集計。gTLDが集計の対象。 日のドメイン登録業者(レジストラ)(「ICANNがレジストラとして認定した企業」一覧(InterNIC提供)内に「Japan」の記載があるもの)を対象。 レジストラ「GMO Internet Group, Inc. d/b/a Onamae.com」のシェア値を集計。 2023年5月時点の調査。

  • Bash版oh-my-zsh、Bash framework「bash-it」を試してみた - Glide Note

    cd ~ git clone http://github.com/revans/bash-it.git ~/.bash_it sh ~/.bash_it/install.sh Your original .bash_profile has been backed up to .bash_profile.bak Copied the template .bash_profile into ~/.bash_profile, edit this file to customize bash-it Do you use Jekyll? (If you don't know what Jekyll is, answer 'n') [Y/N] Y Copied the template .jekyllconfig into your home directory. Edit this file to

    masudaK
    masudaK 2012/04/27
  • sedで/の置換をエスケープなしでやりたい - 256bitの殺人メニュー

    おっさん力その2。 sedでパス名の置換したい時に、/のエスケープすんのがめんどくさいって言ってた人がいたんで。 エスケープ #!/bin/bash for i in `ls /usr/local/` do echo ${i} | sed "s/\/usr\/local\///" done↓結果 bin etc games include lib man sbin share srcこれでもいいんですけど、ごちゃってしてみづれーですよね。 エスケープしない よく知られてないのかはわかりませんが、実は、s/の/部分の記号はなんでもいいのです。 ということで、このようにもかけます。 #!/bin/bash for i in `ls /usr/local/` do echo ${i} | sed "s#/usr/local/##" doneでも行けます。 まあ このパターンならbasename使

    sedで/の置換をエスケープなしでやりたい - 256bitの殺人メニュー
    masudaK
    masudaK 2012/04/11
    h
  • シェルスクリプトで標準出力をファイルに出すようにする - 256bitの殺人メニュー

    おっさん力その1。 知らない人もいるのですなとおもって、メモ的に。 シェルスクリプトで標準出力をファイルに出す方法について 普通はあんまり使わないけど、監視サーバから叩かれるシェルのログを見たい時とかには使いますね。 テストコード cat <<'EOF' >fdtest.sh #!/bin/bash # 標準出力(1)のFDを3に退避 exec 3>&1 # 標準出力をlogfileにリダイレクト exec > logfile echo "output file" # 退避していたFDをもとに戻す exec 1>&3 echo "output screen" EOF 出力結果 kuwano@localhost:~/bin/test$ bash fdtest.sh output screen kuwano@localhost:~/bin/test$ cat logfile output fi

    シェルスクリプトで標準出力をファイルに出すようにする - 256bitの殺人メニュー
    masudaK
    masudaK 2012/04/11
    ググってもなかなか見つからなかった手法で、本当に助かりました>< ありがとうございます!!!
  • bash でカンマ区切り文字を split して変数に代入

    bash のシェルスクリプト内で、カンマ区切りテキストを分割して変数に入れたい場合。PerlPHP の split みたいな動作をさせる方法です。 IFS 変数に区切り文字をセットしたうえで set コマンドを使用します。 #!/bin/bash TEXT='AAA,hoge,2345' IFS=',' set -- $TEXT echo $1 echo $2 echo $3 set コマンドはタブや空白区切りの値を $1, $2, $3, ……に代入します。IFS を変更することによりカンマ区切りに対応できます。 もしくは tr コマンドでカンマを空白に置き換えて配列に代入します #!/bin/bash TEXT='BBB,データ,3456' arr=( `echo $TEXT | tr -s ',' ' '`) echo ${arr[0]} echo ${arr[1]} echo

    masudaK
    masudaK 2012/04/10
  • 本を読む 関数型言語shの基礎文法最速マスター

    関数型言語shの文法一覧です。他の関数型言語をある程度知っている人がこれを読めば、shの基礎をマスターしてshを書けるようになっています。以下、Clojureあたりを想定して説明します。 注意:これは基礎文法最速マスターねたのパロディです。動作は物ですが、意味はコジツケです。 REPL shの処理系は、POSIX準拠のUnix系環境であれば標準で用意されています。REPLを起動するには、shを実行します。 sh すると、プロンプトが表示されます。 $ shのほかに、REPLに行編集機能を付けたbash・zsh・tcshなどもありますが、ここでは割愛します。 なお、REPLとして使うほかに、あらかじめ用意したスクリプトをshで実行することもできます。 sh hoge シーケンス shの扱うデータは、すべて、ある単位(ラインと呼びます)のデータが並んだシーケンスです。たとえば、seq関数(L

  • 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の機能を使い倒すことを目的としています。ここにあ

    masudaK
    masudaK 2012/04/10
  • 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の日記
    masudaK
    masudaK 2012/04/10
  • 変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス

    → 他のプログラミング言語と同様に = を使用する。 シェルスクリプトでも C言語などと同様に = を使用することで変数に値を設定することができる。ただし、C言語とは違い = の前後にスペースがあってはいけない。 また、変数名の大文字と小文字は区別されるため変数 VAR と変数 var は別物として扱われる。さらにシェル変数に「型」は存在しないので、文字列や数値を区別なく設定できる。 ポイントをまとめると以下のとおりとなる。 = を使う 値の設定時は変数名の先頭に $ を付けない ($ は参照時のみ) = の前後にスペースを入れない (前後にスペースがあるとエラー) 型は存在しない (declare コマンドや typeset コマンドで似たようなことができるが推奨はしない) 変数名の大文字・小文字は区別される (VAR と var は別物) 特に「2」は初心者が犯しがちなミスなので注意す

    変数を使用する | UNIX & Linux コマンド・シェルスクリプト リファレンス
  • Bashで覚えておくとよいデータ構造 - 配列 - いろいろ解析日記

    Bashで必要なデータ構造の覚書です。 目次 配列 配列を生成する。 配列にデータを追加する。 配列にデータを格納する。 配列からデータを取得する。 配列中のすべてのデータに同じ処理をする。 関連記事 配列 配列は複数件のデータを扱うためのデータ構造です。 ■配列を生成する。 配列の生成は以下のように行います。 配列の名前=() 配列の名前=("データ" "データ" "データ")配列の生成では、配列の名前を指定します。 もし、生成時にデータを格納する場合に、()内にデータを指定します。 例えば、空の配列ARRAY1を生成するには、以下のように書きます。 ARRAY1=()例をもう一つ。データを3つ格納した配列ARRAY2を生成するには、以下のように書きます。 ARRAY2=("history" "japanese" "math") ■配列にデータを追加する。 配列へのデータの追加は以下のよ

    Bashで覚えておくとよいデータ構造 - 配列 - いろいろ解析日記
    masudaK
    masudaK 2012/04/10