bash

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

次のエントリにあるように、gdbを使うとプロセスの標準入出力を別の端末(tty)に繋ぎ変えることができる。 コンソールから切れたプロセスを標準出力につなげなおす - 絶品ゆどうふのタレ しかし実際にはあるプロセスからサブプロセスが複数呼ばれている状況…

Cygwinから管理者権限でプログラムを実行する

Cygwinから管理者権限でプログラムを実行する方法のメモ。 たとえばCygwin付属のpingコマンドは、ターミナル(minttyなど)が管理者権限で動作していない場合エラーとなってしまう。 $ ping localhost ping: socket: Operation not permitted このような場合…

コマンド入力中にman page / helpを見れるようにする

bind -xはコマンドラインの状態を保持したまま任意のコマンドを実行するキーバインドを定義する。 これを使うと、zshのrun-helpのような機能を実装することができる。 if [[ -n "$PS1" ]]; then bind -x '"\eh":"[[ -n $READLINE_LINE ]] && man ${READLINE_…

bash tips

きちんとまとめられた情報が少ないのでメモ。 bashの機能はemacsと共通する部分が多く、使われている用語やキーバインドも類似している。 以下で述べるキーバインドについて、C-xはCtrl+x、M-xはESC xまたはC-[ xを表す。 kill-ringを活用する bashにはkill-…

grepのようにfindする

findコマンドのオプション指定が面倒なので、grepのように使える、次のようなシェル関数を定義してみる。 if [[ -n "$PS1" ]]; then f() { find "${2:-.}" \! -type d \! -path "*/.*" -path "*$1*" |& grep -v -F ": Permission denied" | sort } fi このコ…

aliasとシェル関数の使い分け

aliasとシェル関数の違いについてのメモ。 たとえばgrepコマンドを常にロケール非依存にて扱い処理を高速化するにあたり、一見、次の二つの定義は同等に見える。 alias grep='LC_ALL=C grep --color=auto' grep() { LC_ALL=C command grep --color=auto "$@"…

安全に標準コマンドを置き換える

「cdの引数を絶対パスにしてコマンドヒストリに残す」のように標準コマンドを置き換える上で考えるべき、bashの仕組みについてのメモ。 環境 $ uname -a Linux vm-ubuntu64 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x8…

cdの引数を絶対パスにしてコマンドヒストリに残す

cdの引数が相対パスのままコマンドヒストリに残って便利な例が思いつかないので、絶対パスでコマンドヒストリに残すようにする。 具体的には、以下のシェル関数を.bashrcに書く。 if [[ -n "$PS1" ]]; then cd() { command cd "$@" local s=$? if [[ ($s -eq…

chardetで文字コードを自動変換する

curlなどで取得したテキストを自動的にターミナルの文字コード(たとえばUTF-8)に変換したい場合がある。 このような場合には、Pythonのchardetモジュールが使える。 chardetは、Mozilla Firefoxで使われている文字コード判定アルゴリズムをPythonモジュー…

colordiffを使わずにdiffをカラー表示する

diffの出力は標準でカラー表示されない。 カラー表示するためのコマンドとしてはcolordiffがあるが、多くの場合標準では入っていないためインストールする必要がある。 ところが、diffのカラー表示はgitを使ってもできることを知った。 git diffは比較するフ…

bashrcに書いておくと便利なショートカット関数3つ

こういうの、設定してもだいたい忘れて使わなくなるのだけど、定着したものがいくつかあるので書いてみる。 l: ファイルにはless、ディレクトリにはlsを実行する 一つのコマンドで両方できるようにしておくと、判断の手間が省けて便利。 l() { # if the argu…

シェルのエイリアス展開を無効化するには頭にbackslashをつける

bashなどでコマンドがエイリアス展開されるのを無効化するにはいくつか方法がある。 たとえばlsの場合、 /bin/lsのように直接実行ファイルを指定する $(which ls)のようにコマンド置換を経由して実行ファイルを指定する command lsのようにシェルのビルトイ…