タグ

bashに関するhikazohのブックマーク (21)

  • Batsを使って手軽にCLIプログラムのテストをする - Qiita

    BatsはCLIで実行するUNIXプログラムのテストをするためのツールです。 Bash Automated Testing SystemでBatsとのこと。 Bats自体がbashで書かれていて、特にbashスクリプトのテストに最適なようですが、出力と終了ステータスをチェックするような単純な作りなので、CLIで動作するプログラムであれば何でもテストできるでしょう。 元々、ruby-buildのテストファイル眺めてたら拡張子が*.batsになってて、「なんだろこれ?」と思って見たら同じ作者のBatsというツールでした。 使ってみたら結構手軽で便利だったので紹介します。 簡単な例 以下の例を見れば大体どんな感じかわかると思います。 bc, dcの演算結果をチェックするためのテストですね。 #!/usr/bin/env bats @test "addition using bc" { resul

    Batsを使って手軽にCLIプログラムのテストをする - Qiita
    hikazoh
    hikazoh 2018/03/26
  • 雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog

    κeenです。雰囲気でシェルを使ってる人が多いとのことだったので少しばかり込み入った知識を。 あと一応POSIX準拠かどうかも気にしながらやっていきます。 基礎知識編 シェルの種類 まず、POSIXにシェルが定義されています。 これに最低限の機能で準拠しているものをPOSIXシェルと呼ぶことにします。いわゆる/bin/shです。具体的な実装はbsh、ash、dashあたりでしょうか。 最低限の機能以上に色々拡張されているシェルを拡張POSIXシェルと呼ぶことにします。具体的な実装はbash、zsh、kshなどでしょうか。 ここでは触れませんがPOSIX準拠でないシェルも存在してcshやtcshなどのシェルがあります。あと確か最近話題のfishも違ったような。 さて、1つ問題になるのは普段使いのコマンドラインはおおむね拡張POSIXシェルでしょうが、サーバで使うシェルやデプロイスクリプトで呼

    雰囲気でシェルを使っている人のためのシェル入門 | κeenのHappy Hacκing Blog
    hikazoh
    hikazoh 2017/10/30
  • Bashアプリケーションをテストする | POSTD

    以前、bashスクリプトをテストする仕事に取り組んだことがあります。最初、Pythonユニットテストを使うことにしましたが、プロジェクトに外部技術を持ち込むのは気が進みませんでした。そこで、仕方なく、悪名高い bash で書かれたテスト用フレームワークを使いました。 既存ソリューションの概要 手に入るソリューションを探してGoogle検索しましたが、選択肢はほんの少ししかありませんでした。そのうちいくつかについて、詳しく見ていきましょう。 重要になるのは、どんな基準でしょうか? 依存関係: bass のテスト用フレームワークを選ぶときに、 python 、 lua などのシステムパッケージも一緒に引きずり込むのは嫌ですね。 インストールの難しさ:継続的な開発の実装とTravis CIでの継続的な統合も仕事の1つだったので、私にとってインストールにかかる時間と手間数が妥当だということは、重要

    Bashアプリケーションをテストする | POSTD
    hikazoh
    hikazoh 2017/09/05
  • BASHシェルスクリプトで「キー入力待ち」プロンプトを実装する | DevelopersIO

    BASHシェルスクリプト実行中に、 例えば下記のように表示させたい場面はよくあります。 実行しますか? (y or N): ここで人間が「y(あるいはYes)」と入力しないと先に進まない、問題があればNと入力して終了したり、CTRL+Cで強制終了させたり。 そんなプロンプト機能を実装してみます。 先にネタばらしをすると、全部readコマンドがやってくれます。 例1 : 「Hit enter key!」 単に実行を一時停止して、問題がなければエンター(リターン)キーを押すことで先に進むようなシェルスクリプトは、このようになります。 #!/bin/bash : (前段階の処理) read -p "Hit enter: " (続きの処理) : 単に「Hit enter: 」と表示して処理が一時停止します。エンター(リターン)キーを押せば先に進みます。 もし前段階の処理で何かしら問題が見つかれば、

    BASHシェルスクリプトで「キー入力待ち」プロンプトを実装する | DevelopersIO
    hikazoh
    hikazoh 2017/07/12
  • Bashにおけるリダイレクト - メモの日々(2017-05-24)

    ■ [shell][unix] Bashにおけるリダイレクト おれはリダイレクトを雰囲気で使っている。たまに混乱するので気になる所を調べてメモしておく。使用するシェルはBashとする。 ファイルディスクリプタ リダイレクトを理解するにはファイルディスクリプタを理解する必要があるだろう。ファイルディスクリプタをどう表現するのが正しいかよくわからないが、 入出力先を持つ非負の整数 でどうだろうか。入出力先はファイルや画面、キーボードなどになる。 プロセスは生成されたときに0,1,2という3つのファイルディスクリプタを持っている。これらが入出力先として何を持っているのかは親プロセスが決めることであり、プロセス自身は関知しない。 リダイレクトとは シェルがリダイレクトで行うのは、 新しいファイルディスクリプタを作成しその入出力先を設定する。 既存のファイルディスクリプタの入出力先を変更する。 ファ

    Bashにおけるリダイレクト - メモの日々(2017-05-24)
    hikazoh
    hikazoh 2017/06/16
  • Bashのexecコマンド - メモの日々(2017-05-25)

    ■ [shell][unix] Bashのexecコマンド Bashにはexecという組み込みコマンドがある。このコマンドには command が指定されていない場合、任意のリダイレクトはカレントシェルで効果を持ち、 終了ステータスは 0 となります。 という機能がある。これはシェルが持つファイルディスクリプタを操作する目的に使える。例えば、 $ exec >/tmp/oreore を実行すると、ファイルディスクリプタ1(標準出力)の出力先が /tmp/oreore に変更され、以降このシェル上での標準出力への出力は画面ではなく /tmp/oreore に対して行われるようになる。 (ファイルディスクリプタやリダイレクトについては昨日のメモを参照せよ)

    Bashのexecコマンド - メモの日々(2017-05-25)
    hikazoh
    hikazoh 2017/06/16
  • flockコマンドを使用して二重起動を防ぐ - メモの日々(2017-05-29)

    ■ [shell][unix] flockコマンドを使用して二重起動を防ぐ Linux上でコマンドの二重起動を防ぐにはどうするか。flockコマンドを使うのがよさそう。 flockコマンドは指定ファイルをロックしてコマンドを実行するコマンド。-n オプションによりロック中の場合は直ちに処理を終了できる。 $ flock -n lock echo hello flockにはファイルではなくファイルディスクリプタを指定することもできて、この場合はそのファイルディスクリプタを閉じるまでロックが維持される。シェルスクリプトの中で排他制御を行うときはこのモードを使とよい。シェルスクリプト自身を入力用にオープンしてロックするのがお手軽。 #!/bin/bash set -e ( flock -n ${my_fd} || exit 1 sleep 5 echo hello ) {my_fd}< "$0"

    flockコマンドを使用して二重起動を防ぐ - メモの日々(2017-05-29)
  • Bashで乱数 - メモの日々(2017-05-31)

    ■ [shell] Bashで配列 Bashでは a=(a b c d e) のように()を使うと配列を生成することができる。 要素の参照 echo ${a[0]} #=> a echo ${a[1]} #=> b echo ${a[-1]} #=> e echo ${a[@]} #=> a b c d e echo ${a[@]:2} #=> c d e echo ${a[@]:2:2} #=> c d 要素数とインデックスの参照 echo ${#a[@]} #=> 5 echo ${!a[@]} #=> 0 1 2 3 4 要素の追加と削除 a+=(hello) && echo ${a[@]} #=> a b c d e hello a[100]=world && echo ${a[@]} #=> a b c d e hello world unset a[2] && echo ${a

    Bashで乱数 - メモの日々(2017-05-31)
    hikazoh
    hikazoh 2017/06/16
  • Bashで計算 - メモの日々(2017-05-31)

    ■ [shell] Bashで配列 Bashでは a=(a b c d e) のように()を使うと配列を生成することができる。 要素の参照 echo ${a[0]} #=> a echo ${a[1]} #=> b echo ${a[-1]} #=> e echo ${a[@]} #=> a b c d e echo ${a[@]:2} #=> c d e echo ${a[@]:2:2} #=> c d 要素数とインデックスの参照 echo ${#a[@]} #=> 5 echo ${!a[@]} #=> 0 1 2 3 4 要素の追加と削除 a+=(hello) && echo ${a[@]} #=> a b c d e hello a[100]=world && echo ${a[@]} #=> a b c d e hello world unset a[2] && echo ${a

    Bashで計算 - メモの日々(2017-05-31)
    hikazoh
    hikazoh 2017/06/16
  • Bashで配列 - メモの日々(2017-05-31)

    ■ [shell] Bashで配列 Bashでは a=(a b c d e) のように()を使うと配列を生成することができる。 要素の参照 echo ${a[0]} #=> a echo ${a[1]} #=> b echo ${a[-1]} #=> e echo ${a[@]} #=> a b c d e echo ${a[@]:2} #=> c d e echo ${a[@]:2:2} #=> c d 要素数とインデックスの参照 echo ${#a[@]} #=> 5 echo ${!a[@]} #=> 0 1 2 3 4 要素の追加と削除 a+=(hello) && echo ${a[@]} #=> a b c d e hello a[100]=world && echo ${a[@]} #=> a b c d e hello world unset a[2] && echo ${a

    Bashで配列 - メモの日々(2017-05-31)
    hikazoh
    hikazoh 2017/06/16
  • enhancd を改修して "cd -" や "cd .." の挙動を変えずに使えるようにした - weblog of key_amb

    Bash で enhancd を導入することにした cd の履歴を peco で移動したい。 シェル環境で peco を使いだした人なら、きっとそう思うことがあるでしょう。 zsh だと、cdr と組み合わせることで実現できます*1。 下の記事あたりを参考に設定するといいでしょう。 [zsh]cdr: 開いたディレクトリの履歴からディレクトリを開く | DevAchieve 最近ナウイpecoを試してみたメモ | Futurismo さて、bash の場合、最近は b4b4r07/enhancd を使う人が多いのではないかなと思います。 いくつか作者の @b4b4r07 さんが記事を書いてます。 http://blog.b4b4r07.com/entry/2014/11/20/134901 ターミナルのディレクトリ移動を高速化する この enhancd は Bash の小枝集 で紹介されて

    enhancd を改修して "cd -" や "cd .." の挙動を変えずに使えるようにした - weblog of key_amb
    hikazoh
    hikazoh 2017/01/15
  • bashrc 内で bind を使うとリモートからコマンド実行時に警告が出る - weblog of key_amb

    peco などを快適に使うために ~/.bashrc 内で bind コマンド*1を使って、キーバインドをカスタマイズしています。 このとき ssh $host "コマンド" のようにリモートからコマンドを実行すると、 ~/.bashrc から bind を実行する行で、下のような警告が出ます: /home/key-amb/.bashrc: line 30: bind: warning: line editing not enabled 解決策 この警告は TTY が有効でないことに由来するようです。 例えば、下のスレッドに回答があります: http://superuser.com/questions/892658/remote-ssh-commands-bash-bind-warning-line-editing-not-enabled?answertab=votes#tab-top

    bashrc 内で bind を使うとリモートからコマンド実行時に警告が出る - weblog of key_amb
    hikazoh
    hikazoh 2017/01/15
  • 割りと便利だけど微妙に忘れがちなbashのコマンド・チートシート - Qiita

    自分用にメモしておく コマンド実行 CMD1; CMD2, CMD1 && CMD2 ;はCMD1の結果に関わらずCMD2も実行される &&はCMD1の結果が正常な場合のみCMD2が実行される CMD1 || CMD2 - 失敗時に後続コマンドを実行する CMD || printf "%b" "MSG"でエラーメッセージを表示する エラーメッセージ表示後exit 1したい場合 = CMD || { printf "%b" "FAILED.\n" ; exit 1 } CMD || printf "%b" "FAILED.\n" ; exit 1と波括弧無しで書くと期待通り動作しない(CMDが成功時もexit 1してしまう) CMD & - バックグラウンド実行 CMD &で[1] 4592のようにジョブ番号とプロセスIDが表示される killしたければkill %ジョブ番号 か kill

    割りと便利だけど微妙に忘れがちなbashのコマンド・チートシート - Qiita
    hikazoh
    hikazoh 2017/01/11
  • 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
  • Cygwinで1行でプロンプトを表示する - ablog

    .bashrc でシェル変数 PS1 を設定する。 .bashrc 設定例 PS1='\d \t \W\ $' 実行結果 Wed Jun 29 15:46:40 Poderosa\ $ 参考 bash の場合 PS1 という名前のシェル変数です。なぜ PS1 なのかは、マニュアルによると "The primary prompt string"=プライマリ(1番目の)プロンプト文だからです。"The secondary prompt string"という2番目のプロンプト文を示す PS2 もあります。行継続用プロンプト文です。『 \ 』を使って次行に引き渡されたときの指定です。 プロンプトの確認や設定 - Pocketstudio.jp Linux Wiki http://wp.c-kint.tv/?p=144 Linuxのプロンプトの表示を変更する - Qiita

    Cygwinで1行でプロンプトを表示する - ablog
  • find ... xargs ~ のラッパーを2つ書いたけど ag に移行していこうと思う - weblog of key_amb

    自分がよく使うコマンドを、自分が使いやすいオプション付きでラッパー化しました。 自分はこれまで ag(the silver searcher) をほとんど使っていなかった *1 ので、いつもこんなコマンドを叩いていました。 …が、このエントリを書くにあたって改めて調べたところ、ag の方が便利そうで、下の機能はだいたいまかなえそうなので、今後は ag にしていこうとしているところです。*2 後者の xfperl-pie の方は少し便利かもしれませんが、でもやっぱり ag でいいかなという気もしています。 ともあれ、下の2つは GitHub で公開していますので、お気に召しましたらご自由にお使い下さい。 xfgrep # 使い方 xfgrep KEYWORD [-i|--ignore IGNORE_FILE_PATTERN] [-d|--dir DIR] \ [-f|--file FILE]

    find ... xargs ~ のラッパーを2つ書いたけど ag に移行していこうと思う - weblog of key_amb
  • bash -eより set -e - hitode909の日記

    こういうシェルスクリプトがあるとする. -eしてるので,途中でエラーが出たときには止まってほしい. #!/bin/bash -e echo 1 ehco 2 echo 3 止まってくれ……!! % ./a.sh 1 ./a.sh: line 4: ehco: command not foundちゃんと止まった. ところで,bash ./a.shとか,cat a.sh | bashとかして実行してみると,3まで実行されてしまう!!!. % bash ./a.sh 1 ./a.sh: line 4: ehco: command not found 3 % cat ./a.sh | bash 1 bash: line 4: ehco: command not found 3 こういったことがあってはつらいので,bash -eじゃなくて,set -eしましょう. #!/bin/bash set -

    bash -eより set -e - hitode909の日記
    hikazoh
    hikazoh 2015/12/28
  • 【たのしいな】様々なコマンド達を何も考えずにつないで遊ぶ - Qiita

    きっかけ matsuya-generator-rubyが、cowsayコマンドと組み合わせるとシュールこの上ない。 pic.twitter.com/gxaudeU377 — ぐれさん (@grethlen) 2015, 12月 6 もっと色々やってみたい。 あれ?Shell Script Advent Calendar 2015の22日目の枠残ってるじゃん。 じゃあやろう。 環境 Mac OSX Yosemite 10.10.5の端末上で実施。 zshを使って動作確認してますが、多分bashでも動きます。

    【たのしいな】様々なコマンド達を何も考えずにつないで遊ぶ - Qiita
  • 本を読む bashは環境変数をどう管理しているか

    linux - .bashrcでexportしたPATHが/procにあるプロセスファイルの環境変数(PATH)と一致しないように見える - スタック・オーバーフロー 質問自体は識者の方々が答えているので略として、bashが環境変数をどう管理しているかについて私がコメントした内容を改めてまとめておきます。 bashは起動時に、環境変数の内容から、グローバル変数shell_variablesで指すハッシュ表を作る 以後はシ‌​ェル変数(環境変数を含む)はそのハッシュ表で管理する exportを実行すると、そのハッシュ表のエントリーにatt_exported属性が付く それと並行して、グローバル変数export_e‌​nvが管理されている 外部コマンドの実行時などに、export_envの内容が、shell_variablesをもとに更新される execveシステムコールには、このexport

  • gdbを使っていい感じにプロセスツリーを手元の端末に繋ぎ変えるシェルスクリプト - ももいろテクノロジー

    次のエントリにあるように、gdbを使うとプロセスの標準入出力を別の端末(tty)に繋ぎ変えることができる。 コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ しかし実際にはあるプロセスからサブプロセスが複数呼ばれている状況もあり、そのような場合にはそれぞれのプロセスについてgdbでアタッチして端末を繋ぎ変える必要がある。 そこで、この操作を楽に行うためのシェルスクリプトを書いた。 #!/bin/bash # grabtty.sh rootpid="$1" newtty=$(tty) if [[ $(whoami) != "root" ]]; then echo "must be root." exit 1 fi if [[ -z "$rootpid" ]]; then echo "Usage: $0 PID" exit 1 fi grabpid() { loca

    gdbを使っていい感じにプロセスツリーを手元の端末に繋ぎ変えるシェルスクリプト - ももいろテクノロジー