タグ

bashに関するfumikonyのブックマーク (95)

  • dotenv を Bash と Zsh でやる - Qiita

    優先順位 環境変数 .env 変数 vlucas/phpdotenv のデフォルトの挙動にそのまま従う感じのアレ。アレをBashやZshで書きたくなった。 実装2パターン どちらもBashとZshで差異なく動作します。プロセス置換機能さえあればOK。 環境変数に無い.env変数をシェル変数としてインポートする 現在のプロセスでしか参照しない場合はシェル変数で十分。

    dotenv を Bash と Zsh でやる - Qiita
  • エラー監視時(set -e)の汎用トラップコード(trap) - Qiita

    今回実現すること シェルスクリプトの途中でエラーが発生した(コマンドの終了ステータスが 0 以外だった)とき、スクリプトを中断し、エラー発生時の環境情報を出力する。実行例は以下。 $ ./sample1.sh aa "bb" "cc dd" hello mondai hassei ← ここで問題発生 ------------------------------------------------------------ Error occured on ./sample1.sh [Line 8]: Status 1 PID: 3888 User: kobake Current directory: /test/shell Command line: ./sample1.sh "aa" "bb" "cc dd" ----------------------------------------

    エラー監視時(set -e)の汎用トラップコード(trap) - Qiita
  • bashのtrap ERRによるデバッグの落とし穴? - Qiita

    bashスクリプトのデバッグ手法として、擬似シグナルERRを使用して、エラー発生時にスクリプトを以下のような方法を使っていた。 (オライリーのbashに書いてあるようでよく見かける) trap function ERR 最近、サブルーチン内でのエラーが拾えずスクリプトが最後まで言ってしまう場合が場合があったので少し調べてみた。 擬似シグナルERRの条件をマニュアルで調べると "コマンドや関数が非ゼロなリターンコードを返した場合の擬似シグナル" サブルーチンの途中でエラーが起きてもその後のコマンドが正常終了すればサブルーチンはゼロを返してしまう。 そうすると「コマンド」や「関数」が非ゼロを返さないことになるので、trapできないのが原因か。。。納得。 いろいろ考えたが、結局サブルーチンを多用するようなbashスクリプトではERRはそぐわないと考え、暫定対処として、set -eを行いエラー発

    bashのtrap ERRによるデバッグの落とし穴? - Qiita
  • Bash setを知る - ハラミTech

  • bashでカッコを駆使して例外処理してみる - Qiita

    Bashで少し細かい例外処理やtry-catch文っぽいことをしたかったのでメモ trapでいいんじゃないの? trapを使うことで、コマンドがエラー復帰した際や、 Ctrl-Cで強制終了された際に実行される処理を定義できます。 #!/bin/bash finalize(){ echo "Finalization" exit 1 } set -e trap "finalize" ERR 2 コマンド1 コマンド2 コマンド3 コマンド4 しかし、こういう書き方は以下の欠点があると思ってます。 処理途中のコマンドで、エラー復帰を無視したい場合のコーディングが複雑 エラー処理の振る舞いを、処理ごとに変えたい場合にわかりづらくなっていく 1点目に手っ取り早く解決するなら、下記のようなコードを書けば、 いいですが、直感的に理解しづらくなります(と私は感じました)。 #!/bin/bash fina

    bashでカッコを駆使して例外処理してみる - Qiita
  • この処理Pythonでどう書く? - エムスリーテックブログ

    EF15形は高性能な電気機関車であったが、引き出し性能が蒸気機関車に劣ると誤解されていた。 誤った運転方法により来の性能を引き出せていなかったのである。 (spaceaero2 [CC BY 3.0], ウィキメディア・コモンズより) こんにちは、エムスリー・エンジニアリングG・基盤開発チーム小です。 WEBサイトは RailsやSpringなどの「体部分」だけでは完結しません。レポート作成・データ更新などの細かい処理も必要です。 過去にはこうした用途にはBashがよく使われました。しかし、Bashは落とし穴が多かったり、クラスなどの抽象化機能がなかったりして、規模が大きくなると辛くなります。 そこで、Bashの代替候補に挙がるのがPythonです。エムスリーでもかつてはBashを使っていましたが、現在は新規案件にはPythonを推奨しています。 しかし、実際にPythonで書き直そ

    この処理Pythonでどう書く? - エムスリーテックブログ
  • bash スクリプトの先頭によく書く記述のおさらい - Money Forward Developers Blog

    こんにちは。 マネーフォワードでアグリゲーション開発を担当しています中川です。 今回のブログは、私が bash スクリプトを書く際に心がけている事のおさらいをします。 知ってて当たり前のことかも知れませんが、意外と理解されていないアレです。 では、私が bash スクリプトを書く際によく使う記述を一つずつ紹介します。 2種類の shebang シェルスクリプトの一行目に必ず記述する #! で始まる行を shebang と言います。 bash スクリプトの shebang は、bash を絶対パスで指定する方法と、env を使って指定する方法の二種類あります。 bash を絶対パスを指定する方法 #!/bin/bash env を使ってを指定する方法 #!/usr/bin/env bash 前者は /bin/bash が使われます。 (/bin/bash が存在しなければスクリプトの起動時に

    bash スクリプトの先頭によく書く記述のおさらい - Money Forward Developers Blog
  • シェルスクリプトで "set -o pipefail" を付けるとSIGPIPEで死ぬ - Qiita

    #!/usr/bin/env bash set -eo pipefail false | true echo "won't be printed" # この行は実行されない false コマンドは常に失敗するので、以降の行は実行されないというわけです。 SIGPIPEで死ぬパターン しかし、ここで1つ落とし穴があります。 パイプの左側のコマンドが通常は成功する場合でも、パイプの右側のコマンドによって SIGPIPE が発生することがあるのです。 例えば、次のようなパターンです。

    シェルスクリプトで "set -o pipefail" を付けるとSIGPIPEで死ぬ - Qiita
  • シェルスクリプトの set -e は罠いっぱい

    ふみやす@シェルまおう(自称でない) FGO:838,149,789 @satoh_fumiyasu Perl では最初に use strict; use warnings すべきなように、シェルでは set -u すべき。「例外処理って何? おいしいの?」って人は set -e もしておけ。 2012-06-25 18:25:20 ふみやす@シェルまおう(自称でない) FGO:838,149,789 @satoh_fumiyasu シェルスクリプトをまともに書けない奴は、それでも書かなければならないときは、とりあえず変数展開するとき必ずダブルクォートで括れよ。$foo じゃなくて "$foo” な。あと最初に set -u; set -e でもしておきな。シェルスクリプトが駄目なんじゃなくて、書けないだけ。 2012-12-22 00:27:38

    シェルスクリプトの set -e は罠いっぱい
  • bashのそれって実はこういう書き方できるよ一覧 - Qiita

    bashで普段こう書いているけど、実はこういう書き方もあるんですよというのをまとめてみました。 ->の右側がmanに載ってるテク名です。 例えばどういったものが書けるかはガチャガチャした前回の記事で…。 `command` -> Command Substitution 書く量は増えるけど、視認性が良い(ネストした時が特に)。 尚、これは書き方が違うだけでどっちもCommand Substitutionです。

    bashのそれって実はこういう書き方できるよ一覧 - Qiita
  • シェルスクリプトとMakefileの使い分け - ククログ(2012-10-24)

    先日紹介したシェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニックへのコメントとして「なぜMakefileでやらないのか」「Makefileの方がいいのではないか」といったものがありました。確かにmakeはメジャーなビルドツールなので、そのような疑問が出てくるのも当然でしょう。 なぜシェルスクリプトなのかということの理由はいくつかあります。 1つは、先のエントリの題材としたスクリプトが元々はWindows用のバッチファイルをLinuxのシェルスクリプトに移植したものだったからという理由です。Windowsのバッチファイルのベタ移植として作成したシェルスクリプトを継続的にメンテナンスしてきた間の改良の結果として、いくつかのテクニックが盛り込まれるようになったため、そのテクニックにスポットを当てて紹介しようというのが、先のエントリの発端でした。 もう1つは、シェルスクリプトは「シェル

    シェルスクリプトとMakefileの使い分け - ククログ(2012-10-24)
  • シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)

    プログラムの種類によっては、そのまま実行できるものと、実行できるようにするために「ビルド」が必要なものとがあります。Cなどのコンパイルが必要な言語で書かれたプログラムは当然ビルドが必要ですし、コンパイルが不要な言語であっても、インストーラパッケージを作るというビルド作業が必要な場合はあります。 ビルド作業の自動化のためのツールとしてmakeなどがありますが、そこまで格的な事をやる必要がない場合は、シェルスクリプトで「ビルドスクリプト」を作るのが手軽でおすすめです。この記事では、そのような場合に役立つシェルスクリプトのテクニックを4つご紹介します。 エラーの気付きやすさとデバッグのしやすさを高める メッセージに色を付ける シェル関数をライブラリにする 一時的に作業ディレクトリの中に入る エラーの気付きやすさとデバッグのしやすさを高める はじめに紹介するテクニックは問題が発生した時に気づきや

    シェルスクリプトで「ビルドスクリプト」を作る時に便利なテクニック - ククログ(2012-10-11)
  • SIOS Tech. Lab - エンジニアのためになる技術トピックス

    今回は感情認識のライブラリであるPy-Featについてまとめました。 はじめに はじめまして、新卒の山﨑です。先日、OSC広島というイベントに先輩方と作成したアプリ『とびっきりの笑顔で「きのこ」か「たけのこ」かはっきりさ […]

    SIOS Tech. Lab - エンジニアのためになる技術トピックス
    fumikony
    fumikony 2017/02/08
    "4.4以上のbashにバグ" そんな新しいの使ってない
  • bashでちょっと高度なシェルスクリプトを書くときの Tips - pyopyopyo - Linuxとかプログラミングの覚え書き -

    bashでちょっと高度なシェルスクリプトを書くときに役立ちそうな小技をまとめてみました. && と || を積極的に使う bashでは コマンド1 && コマンド2 と記述すると,コマンド1が成功した場合のみ,コマンド2が実行されるようになります. (コマンド1が失敗すると,コマンド2は無視されます.) "||"は"&&"の逆で コマンド1 || コマンド2 と記述すると,コマンド1が失敗した場合のみ,コマンド2が実行されるようになります. (コマンド1が成功すると,コマンド2は無視されます.) これがなんの役に立つのか?まだピンとこない人は,次の errorとabortの例をみてください. エラー処理は error関数と abort関数を使う エラー処理は error関数と abort関数を作ると作業が捗ります. エラーメッセージを出す関数: error function error {

    bashでちょっと高度なシェルスクリプトを書くときの Tips - pyopyopyo - Linuxとかプログラミングの覚え書き -
  • シェルスクリプトのlint - Qiita

    $ cat foo.sh #!/bin/sh elems[0]=0 elems[1]=1 for x in ${elems[*]}; do echo $x done $ ./checkbashisms foo.sh possible bashism in foo.sh line 3 (bash arrays, H[0]): elems[0]=0 possible bashism in foo.sh line 4 (bash arrays, H[0]): elems[1]=1 possible bashism in foo.sh line 5 (bash arrays, ${name[0|*|@]}): for x in ${elems[*]}; do

    シェルスクリプトのlint - Qiita
  • Mackerel のホスト名を ssh の補完候補リストに出力する - tkuchikiの日記

    この記事は、Mackerel Advent Calendar 2015 8日目の記事です。 Mackerel に登録しているホストに ssh するとき、 補完できたら楽かもしれないと思い、その実現方法を模索してみました。 補完機能を一から書くのは大変なので、 bash-completion を使います。 動作環境は Linux です。 ※紹介する方法は、ローカルマシンからの ssh で補完する方法ではなく、 リモートマシンからリモートマシンへ ssh する際に補完する方法です。 bash-completion bash-completion は、bash の補完機能を拡張するものです。 細かく説明されている記事がいくつもあると思いますので説明は省きます。 以下のようにインストールできます。 yum yum install -y epel-release yum install -y --e

    Mackerel のホスト名を ssh の補完候補リストに出力する - tkuchikiの日記
  • Bash Infinity よりずっと前に Bash on Rails なるものを作った人がいると記録しておく - weblog of key_amb

    備忘録を兼ねて、ブログを書いておきます。 きっかけは、昨日のはてブでホットエントリに上がっていた下の記事です。 元記事から、GitHub のソースコードにたどりついて、少しだけ内部のコードを読みました。 https://github.com/niieani/bash-oo-framework どうも、Pure Bash で書かれているようですね。 OO という名前が現すように、オブジェクト指向で書けるように型システムをも実装しているようです。と、これは記事でも紹介されていましたが。 さて、この記事を読む数カ月前に、私は Bash on Rails なるものを作っていた人を知ったので、それを想起しました。 Bash on Rails は @emasaka さんが作った Rails モドキで、「Bash の機能だけでいかに Ruby on Rails っぽいことができるか」を実践したパロディ企

    Bash Infinity よりずっと前に Bash on Rails なるものを作った人がいると記録しておく - weblog of key_amb
  • Bashの補完について

    B! 26 0 1 0 BashのTabを押した時に出る補完の自作等について。 Bash補完 complete 補完補助関数 COMPREPLY compgen COMP_WORDS, COMP_CWORD Bash-Completion MacのHomebrewでBash補完のファイルをインストールするFormulaを作る Bash補完 complete Bashであるコマンドに対して補完を出来るようにしてあげるには complete -F _comp_func cmd とcompleteコマンドを使います。 これでcmdというコマンドに対する補完を_comp_funcという関数で与えます。 -Fで関数を指定。 この_comp_funcという関数は別で定義しないといけませんが、 この関数は通常ダイレクトに使われてほしくないもの(使っても意味無いもの) なので_を最初に付けたりして通常のコ

    Bashの補完について
  • シェルスクリプト (sh, bash) での getopts の雛型

    シェルスクリプトで引数の処理をしたい場合は、getopts が便利ですね。 使い方を忘れてしまいがちで、かつ、決まった形式で使うことが多いので、メモついでに雛型を作っておきます。 雛型 #!/bin/sh # # 20111207 # getopts test # PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/sbin:/usr/sbin export PATH # # usage # _usage() { #(*1) echo "usage:" echo "${0} -a -b HOGE [-c] [-d FOO] [BAR]" exit 1 } # # getopts # while getopts :ab:cd: OPT; do #(*2) case ${OPT} in a) ENABLE_a="t";; b) ENABLE_b

    シェルスクリプト (sh, bash) での getopts の雛型
  • bash のシェルスクリプト(関数)でオプション引数を扱う getopts 使い方サンプル - それマグで!

    シェルスクリプトで引数オプションを使いたい my_shell_script -a /usr/bin みたいに、bashのシェルスクリプトでも引数を扱いたい。 getopts を使えば引数が取れる bash では getopts を使えば、引数の処理を簡単に行うことができて便利。ruby などでは optparseに相当するやつです。 はじめに getopt / getopts の違いについて 全ての初めに。 getoptsについて読む前に知っておかなくちゃいけないことがある。 getopts コマンドとシェルのビルトインの二種類がある。 名前 種類 getopts シェル組み込み getopt コマンド・ファイル Google検索はgetopt/getopts を区別しないで結果を出すので注意が必要でした。 今回、調べたのは getopts です。 getopt は/usr/bin にある

    bash のシェルスクリプト(関数)でオプション引数を扱う getopts 使い方サンプル - それマグで!