タグ

shに関するAmaiSaetaのブックマーク (26)

  • シェルスクリプトのテストを書こう! - Mobile Factory Tech Blog

    駅メモチームでエンジニアをしている id:Eadaeda です。シバンは #!/usr/bin/envを使う派です。 皆さんはシェルスクリプト書いてますか? 環境構築、開発、テスト、ビルド、デプロイなどなど、一連の作業を自動化するための手段として時々出番があるんじゃないでしょうか。 ところでそのシェルスクリプト、テスト書いてますか? シェルスクリプトのテスト 「シェルスクリプトのテスト〜?」って感じですよね。殆どの場合、一度書いてしまえばあんまり壊れることはないし別に…って感じですよね。わかります。実際開発環境のためにdocker compose upするだけのスクリプトなら雑でもいいですよね。 でも、重要な役割をもつスクリプトならどうでしょう。例えばアプリケーションのエントリーポイントや、リリースビルド・デプロイのためのスクリプトなどが思いつきます。 こういうのはテストである程度保証され

    シェルスクリプトのテストを書こう! - Mobile Factory Tech Blog
  • UNIXシェルの並列化により最大34倍高速化する「PaSh」、米MITなどが開発 プログラム結果も正確

    Innovative Tech: このコーナーでは、テクノロジーの最新研究を紹介するWebメディア「Seamless」を主宰する山下裕毅氏が執筆。新規性の高い科学論文を山下氏がピックアップし、解説する。 米ペンシルベニア大学、米MIT、ポーランドのXIV Staszic High School、米国の研究機関Aarno Labs、米Stevens Institute of Technologyによる研究チームが開発した「Practically Correct, Just-in-Time Shell Script Parallelization」は、UNIXシェルで実行されるプログラムの速度を精度を保証しながら劇的に加速させるシステムだ。 このシステムはUNIXシェルにおいて、スクリプトを先読みして並列化を行う。これによりプログラム結果を正確な上で最大34倍高速化し、Webインデックスや自然

    UNIXシェルの並列化により最大34倍高速化する「PaSh」、米MITなどが開発 プログラム結果も正確
    AmaiSaeta
    AmaiSaeta 2022/06/14
  • 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するしかないかと思ってた……
  • シェルスクリプト(sh/bash/zsh)で変数から変数へ代入する方法について - Qiita

    以下 sh/bash/zsh について同様ですが、例では bash とします。 変数から変数への代入 シェルスクリプトで変数から変数へ代入する場合、ダブルコーテーション(")で括る必要はありません。

    シェルスクリプト(sh/bash/zsh)で変数から変数へ代入する方法について - Qiita
    AmaiSaeta
    AmaiSaeta 2021/10/07
    `$(~~)` の内容を `echo` したら改行が無くなる(空白になる)ので、 `$(~~~)` は改行を空白にするのかと思ってた……
  • getoptions を使って面倒なシェルスクリプトのオプション解析コードを自動生成しよう! - Qiita

    はじめに getoptions はシェルスクリプト用のオプションパーサーです。getopts や getopt の代わりに使うことができ、getoptions をインストールするだけで簡単にシェルスクリプトのオプション解析を実装することができます。しかし、不特定の人に配布するシェルスクリプトの場合は getoptions をインストールしてもらうというのは選択肢にならないかもしれません。 でも大丈夫! getoptions はオプションパーサーのジェネレータとして使うこともできます。ジェネレータとして使うと自分でオプションパーサーのコードを書く必要はありません。 オプションパーサーとしての使い方はこちら 「シェルスクリプト(bash等)の引数解析が究極的に簡単になりました」 使い方 オプションパーサーとして使う場合は getoptions コマンドをインストールするだけで使えますが、ジェネ

    getoptions を使って面倒なシェルスクリプトのオプション解析コードを自動生成しよう! - Qiita
  • シェルスクリプト用の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
  • ShellCheck – shell script analysis tool

    GPLv3: free as in freedom documented on the ShellCheck Wiki available on GitHub (as is this website) already packaged for your distro or package manager supported as an integrated linter in major editors available in CodeClimate, Codacy and CodeFactor to auto-check your GitHub repo written in Haskell, if you're into that sort of thing.

    AmaiSaeta
    AmaiSaeta 2019/07/24
    bash/shのlinterみたいな物かね。
  • 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
  • 【危険シェル芸】☠️禁じられた闇の魔術とその防衛術💥 - Qiita

    はじめに Shellには決して使ってはいけない禁呪文と呼ばれるものが存在する。もし社用サーバに対しこれを故意に使えばアズカバン送りは免れ得ないであろう恐ろしい闇の魔術である。(果たしてそれだけで済むのか・・・?) しかし、無知故に、意図せずこのような闇の魔術を発動させてしまうことはインフラエンジニアにとっては、ごく稀にある出来事と言える。無知ゆえに事故を起こさないためにも、🔰初心者🔰にこそ読んでほしい。 今回は、闇の魔術の発動原理と、そのような闇の魔術に対する防衛術を伝授したい。 ‼️注意‼️ ここにある記事の闇の魔術を実行したことによる責任は”一切”取れませんのでご注意ください。 また、禁忌呪文は魔法省から使用が禁じられているので、具体的な抜け方などが未検証なコマンドもいくつか存在します。(は?)詳しい情報をお持ちの偉大なる魔法使いの方は情報提供の方をぜひお願いいたします。 参考サイ

    【危険シェル芸】☠️禁じられた闇の魔術とその防衛術💥 - Qiita
    AmaiSaeta
    AmaiSaeta 2019/01/02
    コメント欄に在る `set -o noclobber` 知らなかった。やらかした事が有る(対象が特に重要でないファイルで良かった)ので、後で.bashrcに足しとく。
  • 個人的によく使う(ベタな)bash alias - Qiita

    今すぐalias登録すべきワンライナー by ゆめみ① Advent Calendar 2018の3日目の記事です。 前回は@YutoMizutaniさんの今すぐaliasを登録しておくべきGitワンライナーでした。 (かぶった部分があることを先にお詫びしておきます...) 「ワンライナー」と言えるほどライナーライナーしてないのですが、簡単だけどもよく使う(ベタともいう)エイリアスを書いておこうかと思います。 物によっては便利かもしれない。 前提 OS: macOS shell: bash 基的になんでもCLIで行いたい人間です 超基的なカスタム 色づけなど if [ "Darwin" = 'Darwin' ]; then alias ls='ls -G' else eval `dircolors ~/.colorrc` alias ls='ls --color=auto' fi al

    個人的によく使う(ベタな)bash alias - 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

    プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話ShellScriptBash 普通のプログラミング言語での開発に慣れた人ほどシェルスクリプト、特にBashで戸惑う部分の一つに、i = 0のように空白を開ければエラーになるし、かといってif[$i!=0]のように詰めてもやっぱりエラーになる、という点が挙げられます。書きたい物を思うように書けなくて「なんだよこのクソ言語は!!!」とブチギレる人は少なくないのではないでしょうか。この記事では、そのイライラを解消するポイントをお伝えしようと思います。 以下、特に断り無く「シェルスクリプト」と書いている場合はすべて「Bashのスクリプト」という意味になります。zsh等他のシェルではまた事情が異なりますので、ご注意ください。 (※以前プログラマーの君! 騙されるな! シェルスクリプトはそう書いち

    プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話 - Qiita
    AmaiSaeta
    AmaiSaeta 2018/07/25
    「想定外の使い方しといて文句言うな」という話ではある。 | 注釈3はちょっと前に悟った。
  • シェルスクリプトを何万倍も遅くしないためには —— ループせずフィルタしよう - Qiita

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

    シェルスクリプトを何万倍も遅くしないためには —— ループせずフィルタしよう - Qiita
    AmaiSaeta
    AmaiSaeta 2017/12/02
    文法……というか思想レベルで違う物で同じやり方を通そうとすれば、そりゃ無理が出てくるよなぁ。
  • プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita

    記事が切っ掛けとなってお声がけを頂き、記事の増補リファイン版となる記事をSoftwareDesign 2018年1月号のシェルスクリプト特集第2章として執筆しました。リファイン版には、この記事で触れていない文法面での分かりにくさについての解説が含まれています。その文法面での分かりにくさの解説の一部に相当する記事もありますので、ぜひそちらも併せてご覧下さい。 Shell Script Advent Calendarをご覧の皆様、図々しくも5日目に続く2度目のエントリーのPiroです。 前回は自作のBashスクリプト製Twitterクライアントをネタに実装を解説しましたが、今日は他の言語で多少のプログラミング経験はあるんだけど、どうにもシェルスクリプトは苦手だ……という人のための、シェルスクリプトによるプログラミングの勘所を解説してみようと思います。多分、プログラミング入門レベルの人や上級

    プログラマーの君! 騙されるな! シェルスクリプトはそう書いちゃ駄目だ!! という話 - Qiita
    AmaiSaeta
    AmaiSaeta 2016/12/08
    そうだよねぇ、あるパラダイムの言語で別のパラダイム無理矢理実現しようとしたら、そりゃ大変だよねぇ。て事を、俺は、JavaScriptでクラスベースオブジェクト指向やろうとする人見る度に思ってた。
  • 対話モードか否か? - 日々之迷歩

    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

    シェルスクリプトの[[と[の違い
  • Mahdi Yusuf

    Fear Not of Man

    Mahdi Yusuf
    AmaiSaeta
    AmaiSaeta 2012/08/07
    Lispワロタ | 全体的に"E""R""T""A""S"辺りが多いのかな。
  • Google Code Archive - Long-term storage for Google Code Project Hosting.

  • bin/git-バルス at master from yuroyoro/dotfiles - GitHub

    Dismiss Octotip: You've activated the file finder by pressing t Start typing to filter the file list. Use ↑ and ↓ to navigate, enter to view files.

    AmaiSaeta
    AmaiSaeta 2011/12/10
    "このコマンドを実行すると、可能な限りGitリポジトリを修復不能な状態にしようとします。"