タグ

Tipsとshに関するAmaiSaetaのブックマーク (10)

  • set -eのもとで特定のコマンドの終了ステータスを変数に入れるシェルスクリプトのスニペット - Islands in the byte stream

    課題編 シェルスクリプトで「あるグローバルな状態を変える操作を行い、その結果をチェックし、状態をもとに戻す」みたいなタスクをするときに「その結果をチェックし」のところでコマンドの終了ステータスを変数に入れて置きたいみたいなことがあります。例えば、次のようなコマンド操作です。 set -e # グローバルな状態を変える操作を行う git merge --no-ff --no-commit $main_branch || true # 結果をチェックしてexit codeを変数に入れる git diff --cached --exit-code --quiet ; code=$? # グローバルな状態をもとに戻す git merge --abort # 上位プロセスに結果を渡す exit $code スクリプト全体には set -e (コマンドが失敗するとシェルスクリプトが即座に終了する)を効

    set -eのもとで特定のコマンドの終了ステータスを変数に入れるシェルスクリプトのスニペット - Islands in the byte stream
    AmaiSaeta
    AmaiSaeta 2021/12/15
    一時的に+eするしかないかと思ってた……
  • シェルスクリプト用のPOSIX準拠で高速な前ゼロ削除とtrim関数の実装 〜それ本当に外部コマンド(sed,awk,tr)が必要ですか?〜 - Qiita

    シェルスクリプト用のPOSIX準拠で高速な前ゼロ削除とtrim関数の実装 〜それ当に外部コマンド(sed,awk,tr)が必要ですか?〜ShellScriptBashshellPOSIX はじめに この記事は「シェルスクリプトは ((i=i+1)) ではなく i=$((i+1)) で計算しなければいけない!という話」を書いた時に、そう言えば算術式($((...)))では頭に 0 がついた時に 8 進数とみなされるというささいな問題がありましたねーということで、その解決方法と一般化すればこれは前から書こうと思っていた外部コマンドを使わない trim 関数の実装の話なので、ついでにそれらを紹介する記事です。 このような処理をする場合に外部コマンドを使って実装する人が多いですが、実はシェルのパラメータ展開を利用すればシェルの機能だけで実装することができます。そしてデータが十分小さい場合にはその

    シェルスクリプト用のPOSIX準拠で高速な前ゼロ削除とtrim関数の実装 〜それ本当に外部コマンド(sed,awk,tr)が必要ですか?〜 - Qiita
  • linuxでファイルを複数行を一行にする方法 - Qiita

    ~ koukou.chou.ts$ cat test 1 2 3 4 5 6 7 8 9 10 ~ koukou.chou.ts$ cat test | tr "\n" " ";echo 1 2 3 4 5 6 7 8 9 10

    linuxでファイルを複数行を一行にする方法 - Qiita
  • 7 Command-Line Tools for Data Science | Jeroen Janssens

    Data science is OSEMN (pronounced as awesome). That is, it involves Obtaining, Scrubbing, Exploring, Modelling, and iNterpreting data. As a data scientist, I spend quite a bit of time on the command-line, especially when there’s data to be obtained, scrubbed, or explored. And I’m not alone in this. Recently, Greg Reda discussed how the classics (e.g., head, cut, grep, sed, and awk) can be used for

    7 Command-Line Tools for Data Science | Jeroen Janssens
  • シェルスクリプトを何万倍も遅くしないためには —— ループせずフィルタしよう - Qiita

    🐚 🐚 🐚 🐚 シェルスクリプトは遅すぎて使えない 普通の「速い言語」より何百、いや、何千倍も遅い 他のプログラミング言語を経験してからシェルスクリプトに入門し、このような感想を持つ方も多いのではないでしょうか。 実際、こういったことは往々にして起こり得ますので、「速い言語」を使うべきか否か見極めることは大事だと思います。 しかし、当にシェルスクリプトというのは、そこまで遅いのでしょうか? データ量が多い場合は常に最初から「速い言語」で書いた方がよいのでしょうか? 実は、そうとも限りません。 シェルスクリプトにはシェルスクリプトなりの「速い書き方」があります。 この「速い書き方」で処理できる問題に関しては、シェルスクリプトは「速い言語」なのです。 では、「速い書き方」とは何かというと、端的には「たくさん繰り返されるループはシェルスクリプトで記述しない」ことです。 以下でこれを説明

    シェルスクリプトを何万倍も遅くしないためには —— ループせずフィルタしよう - Qiita
    AmaiSaeta
    AmaiSaeta 2017/12/02
    文法……というか思想レベルで違う物で同じやり方を通そうとすれば、そりゃ無理が出てくるよなぁ。
  • 対話モードか否か? - 日々之迷歩

    10月末に行われた第19回シェル芸勉強会の問題をふと思い出すことがありました。 最初の問題が、端末で実行した場合とシェルスクリプトに書いて実行した場合で動きを変える、という内容でした。出題者上田さんの解答例では、aliasが効くかどうかで判定していました。 問題と解答は、出題者上田さんが公開されているページQ1をご覧ください。 b.ueda.tech この問題の意味は、シェルの状態が対話(インタラクティブ)モードかどうか?の判定をどうするかということだと思います。 ところでFreeBSDのデフォルトログインシェルはtcshです。FreeBSDのサーバで作業をしていた時に、ふとシェルの設定ファイルを確認してみました。デフォルトで提供される設定ファイルが下記のようになっています。 > tail -n +24 .cshrc if ($?prompt) then【←シェル変数promptが定義され

    対話モードか否か? - 日々之迷歩
    AmaiSaeta
    AmaiSaeta 2015/12/09
    プロンプト設定用変数であるpromptやPS1が在るかどうかで判別。
  • 標準出力を変数に代入する方法あれこれ - 出力を入力へ

    シェルスクリプトにおいて標準出力(標準エラー出力)される文字列を変数に代入して取り扱う方法について。 対象とする関数として以下のものを利用。 sayHello(){ sleep 10 echo "hello stdout" echo "hello stderr" >&2 } 直接変数に代入する 変数messageに出力を代入したければ以下のようにすればよい message=`sayHello` echo ${message} この結果は以下の通り hello stderr hello stdout つまり、関数"sayHello"実行時にエラー出力が表示され、 標準出力は変数messageへの代入を経由して出力される。 これではエラー出力結果を別の変数に代入することはできない。 また、関数"sayHello"をバックグラウンドで実行したい時には 標準出力を変数に代入することができない。 フ

    標準出力を変数に代入する方法あれこれ - 出力を入力へ
    AmaiSaeta
    AmaiSaeta 2014/04/14
    VAR = `SOMECOMMAND`
  • シェルスクリプトの[[と[の違い

    Yoshiaki Kawazu🐸ずん @kawaz シェルスクリプトのテストコマンド [ と [[ の違い。 [[はbashの組み込みコマンドで、[は単にtestという外部コマンドの別名。なので必然[[の方が速い。 [[では比較演算子の<と>がエスケープなしで使える。[では¥<や¥>とする必要がある。 (続く… 2013-02-12 14:05:41 Yoshiaki Kawazu🐸ずん @kawaz (続き) [[では比較演算子の<と>がロケールに応じた辞書順比較になる。[ではASCII辞書順。 [[では=~で正規表現マッチングが使える。bashバージョン3以降の機能。 [[では演算子を"-f"のようにクオートするとエラーになる。]では問題ない。 こんなところかな。 2013-02-12 14:07:56

    シェルスクリプトの[[と[の違い
  • "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乗りの適当な日々
  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Java BlockingQueueで遊ぶ:パイプラインごっこ」でパイプラインの話をしたので、来の、つまりUnixのパイプやリダイレクトを少し調べてみました。 たまに話題となる some-command >file 2>&1 と some-command 2>&1 >fileの挙動の違いについて、「シェルはコマンドラインリダイレクトの指定を右から左に解釈実行する」なんて説明が見つかりました。んなバカな! パージングは左から右にするものですよ。パーズツリーを逆順にたどることはできるけど、そんなことする必然性はなんにもないよ。 次の記事を読むと、「右から左」なんて事情じゃないことが分かるでしょう。 UNIXの部屋 検索: リダイレクト シェルのリダイレクトにまつわる失敗 さてここでは、複雑なリダイレクト処理も完全に理解できる処方箋を示しましょう。例えば、次のコマンドラインが何をするか分かる

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
    AmaiSaeta
    AmaiSaeta 2007/12/22
    あー、なるほど。パイプってなんとなくどんどん繋いでいくというイメージがあるから駄目なのか。
  • 1