weblog of key_amb

主にIT関連の技術メモ

シェル

bashrc 内で bind を使うとリモートからコマンド実行時に警告が出る

peco などを快適に使うために ~/.bashrc 内で bind コマンド*1を使って、キーバインドをカスタマイズしています。 このとき ssh $host "コマンド" のようにリモートからコマンドを実行すると、 ~/.bashrc から bind を実行する行で、下のような警告が出ます:…

"clenv" がそこそこ xxenv っぽく使えるようになってきた

3日前に上の記事を書いたばかりですが、また少し工事をしたので、自分の中での整理も兼ねて、お知らせ。 "clenv" は私が趣味で作っているもので、シェルスクリプトのパッケージ管理ツールのようなものです。 ソースコードは https://github.com/key-amb/clen…

シェルスクリプト用テストツール "shove" v0.8 までの更新のお知らせ

シェルスクリプト用のテストツール "shove" を作って、初めて上の記事で紹介したのは約5ヶ月前になります。 今回は、上記事の時点からこれまでの主な差分をお知らせします。 言うなれば CHANGELOG + αな記事となります。 shove は GitHub で公開しています。…

"clenv" というシェルスクリプトのモジュール管理ツールを引き続き作っている

keyamb.hatenablog.com 上の記事を書いたのが3ヶ月前ですね。 趣味で作っているのでだいぶ波があるのですが、初コミットからは5ヶ月ほど経ちました。 "clenv" って何? "clam" モジュール NEW - "cload" コマンドと "cllib" 関数 NEW - shims/ に shim を置…

enhancd を改修して引数なし cd コマンドの挙動を変えずに使えるようにした

先日、上の記事を書きました。 記事末尾に「余談」として、次のように書きました。 もう1つ enhancd による cd の挙動変更でときどき戸惑うのは、 cd 単体で実行したときです。 enhancd ではこのときもディレクトリ履歴検索による選択画面になります。 これ…

enhancd を改修して "cd -" や "cd .." の挙動を変えずに使えるようにした

Bash で enhancd を導入することにした cd の履歴を peco で移動したい。 シェル環境で peco を使いだした人なら、きっとそう思うことがあるでしょう。 zsh だと、cdr と組み合わせることで実現できます*1。 下の記事あたりを参考に設定するといいでしょう。…

Bash Infinity よりずっと前に Bash on Rails なるものを作った人がいると記録しておく

備忘録を兼ねて、ブログを書いておきます。 きっかけは、昨日のはてブでホットエントリに上がっていた下の記事です。 元記事から、GitHub のソースコードにたどりついて、少しだけ内部のコードを読みました。 https://github.com/niieani/bash-oo-framework …

"clenv" というシェルスクリプトのパッケージ管理ツールのようなものを作った

主に先月、開発していました。 いまバージョンは 0.1.12 です。 最近、久しぶりにやりかけだった機能拡張を進めようかと思ったのですが、拡張した機能を今後、自分自身でもあまり使うイメージが持てなくて、現状をひとまずこの記事にまとめておくことにしま…

"shove" というシェルスクリプト用のテストツールを作った

CONTENTS: "shove" とは Motivation こんなツールにしたい 使い方について 中で何をやっているのか おわりに "shove" とは こちらです。 github.com 動作イメージとしては README.md にも貼っているスクリーンショットがわかりやすいと思うので、こちらにも…

Bash で pathctl という PATH 操作ツールと bb という簡易ベンチマークツールを書いた

小さな Bash のスクリプトを2つ書いたという小ネタです。 使い方 1. pathctl 環境変数に対する push, pop, shift, unshift 操作を提供します。 #!bash source pathctl.shrc pathctl_push /path/to/your-bin # 末尾に追加 pathctl_unshift /path/to/your-bin …

Git のリポジトリを1コマンドで統合できるシェルスクリプトを書いた

気づいたら GitHub にリポジトリが40個以上ありました。 古いものは作りかけだったり、実験して後に放置したものなどがいろいろありました。*1 そのままでも特に困ることはなく、これまで気にすることはなかったのですが、最近ときどき邪魔だなと思うことが…

git push する前に stash して pull --rebase してくれるシェルスクリプト書いた

git push しようとして陥りがちなパターン: remote branch が更新されてて push がこける local 差分があるため git pull --rebase できない こういうケースでイライラしないために、 git stash && git pull --rebase && git push && git stash pop みたいな…

シェル上で特殊な文字が入ったファイルを削除する方法

主に使ってるのは Bash で Linux です。 先頭に - ハイフンとか入ってると困ることがあります。 1) '' で括る rm '*' 2) \ でエスケープ rm foo\ bar 3) -- を前置 -- でオプション解析を止める。 rm -- -f 4) パス指定 rm /path/to/-i rm ./-v 参考 man rm

peco をセットアップしてみた(Bash編)

Zsh編の方と同じことができるようになりました。 ただし、Bash の version 4 以上が必要で、Mac の場合バージョンアップが必要でした。 そのため、Qiitaに書いたやり方で、Homebrew で入れた Bash をログインシェルにしました。 以下、Mac の .bashrc の内容…

peco をセットアップしてみた(Zsh編)

これもだいぶ今更感ありますが、Mac の zsh に peco を入れて設定してみました。 peco について知らない人のために一応かんたんに説明すると、@lestrrat さんが元は Python の percol というツールだったものを Go 言語に移植したもの*1で、テキストをフィル…

(メモ) bash でコマンドラインオプション解析

getopts を使うこともできるが、ロングオプションをサポートしてないとかあるので、下の記事によれば自前解析が一番よさそうとのこと。 bash によるオプション解析

メモ - Mac で Zsh を使う

.zshrc は下記を参考にしている。 少し凝った zshrc

Zsh メモ - git ブランチ名の表示

Mac の zsh だと git-completion はデフォルトで入っていたのですが、git ブランチ名はどう表示したらいいのかな、ということで調べました。 とりあえず下の記事に倣うことにしました。 Git だろうと Mercurial だろうと、ブランチ名をzshのプロンプトにスマ…

シェルスクリプトを書くとき覚えておくこと一選

元ネタ: シェルスクリプトを書く時覚えておくこと一選! - rrreeeyyy.com 内容 set -euo pipefail 解説 Man ページから抜粋します。 $ man set : set [--abefhkmnptuvxBCEHPT] [-o option] [arg ...] set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] : -e…

bash/zsh で source されたスクリプト自身の絶対パスを取得する方法

以下のどちらでも行けました。 いずれも $BASH_SOURCE (zsh の場合は $0) を使います。 DIR=$(cd $(dirname ${BASH_SOURCE:-$0}); pwd) DIR=$(dirname $(readlink -f ${BASH_SOURCE:-$0})) 参考 bash/zshでsourceされたスクリプト内で、ファイル自身の絶対パ…

CentOS 6 で bash-completion を試してみた。

やり方としては、bash-completionでserviceコマンドなどの補完を強化しよう - インフラエンジニアway - Powered by HEARTBEATSの通り、epelのリポジトリを yum repo に追加して、yum install bash-completion しただけ。 参考記事にあるように、service コマ…

シェルスクリプトの論理演算子

たびたびぐぐるのでメモ。 演算子 意味 -n 文字列 文字列の長さが0より大きければ真 -z 文字列 文字列の長さが0なら真 -x ファイル ファイルが実行可能なら真 -s ファイル サイズが0より大きければ真 参考 if 文と test コマンド - UNIX & Linux コマンド・…

zsh使ってみた

究極のシェルといわれるzshを使ってみた。 今までずっと、「どのサーバにも入ってるわけじゃないし、bashでいんじゃね?」と思っていたが、使ったことないというのはよくない気がした。まだ使い倒してないのでよくわかってないことも多いが、bashよりは便利…

一時ファイルを作らずにコマンド実行結果のdiffを取る

Bashの名前付きパイプという機能で一時ファイルを作らずにコマンド実行結果のdiffを取ることが出来る。 || diff <(grep hoge hoge1.txt) <(grep hoge hoge2.txt) ||< 何もこれはdiffだけに限らず、複数ファイルを受け取るようなコマンドでそのまま使うことが…

setコマンド

set -e シェルスクリプト内で、コマンド実行時に直ちに終了したいときに使う。 #!/bin/sh set -e /path/to/test1.sh /path/to/test2.shset -eをつけていないと、test1.sh, test2.sh両方が実行されてしまう。 set -eをつけていると、test1.shが失敗した時には…

Unix系シェルの特殊コマンド(記号)

Linuxのシェルでは、記号がふつうにコマンドとして使えることがある。 そういうのはなかなかぐぐっても出て来なかったりする。 この記事ではそういう特殊な(?)コマンドをまとめる。 : 本来コマンドなのかも定かでないが、ファイルを空にするときに使われる…

シェルスクリプトでの関数の使い方

例 $ vi test_function.sh #!/bin/bash function func() { echo "hogehoge" } func $ ./test_function.sh hogehoge 関数名の前につける"function"は省略可能。 参考 関数の使用方法 - UNIX & Linux コマンド・シェルスクリプト リファレンス

シェルスクリプトの文法チェック

bashなどには文法チェックの機能がある。 /bin/bash -n bash.sh /bin/sh -n sh.shエラーがない場合は何も表示されない。 変数のタイプミスなどはエラーにならないので注意。 参考 @IT:シェルスクリプトの文法チェックを行うには

シェルスクリプトの文字列比較

式 意味 文字列 長さが0より大きければ真 ! 文字列 長さが0であれば真 文字列1 = 文字列2 等しければ真 文字列1 != 文字列2 等しくなければ真 参考 シェルスクリプト入門 [演算・比較]

シェルスクリプトで for ループ

for i in 1 2 3; do echo $i >> /tmp/num.log done for i in `seq 0 5`; do echo $i >> /tmp/seq.log done for a in ${ARR[@]}; do echo $a done