GUIアプリを端末から切り離して実行する

普通に端末からwiresharkとか叩くと、端末を閉じるとwiresharkも終了するので鬱陶しい。&付けて起動しても、なんか色々出力出るし。

wireshark < /dev/null >/dev/null 2>/dev/null &

このように起動すれば端末から完全に切り離されて起動するので、端末閉じても平気だし当然ながら出力も出ない。

いちいち書くのが面倒なのでシェルスクリプトにした。

$ cat `which rg`
#!/bin/sh
$@ < /dev/null >/dev/null 2>/dev/null &

$ rg wireshark

bashrcの変更を全bashプロセスに反映させる

.bashrc の先頭に

trap 'source ~/.bashrc' USR1

と記述しておく。 .bashrc を編集したら、

pkill -USR1 bash

とすると全てのbashプロセスで.bashrcが読み込み直される。

他にも inotifywait で .bashrc の変更を監視するとか考えたけど、それだとちょっと間違った変更を保存した瞬間即全bash終了になりかねないのでやめておこう。

man を vim で綺麗に見る

環境変数を以下のように設定しておくだけ。

MANPAGER="col -b -x | vim -R -c 'set ft=man' - "

これでman memcpyとか叩くと

f:id:nyaocat:20150814110114p:plain

こんな表示になる。もちろん環境やvimの設定によって違うが。

環境変数に設定したcolvimのそれぞれオプションの意味は、この記事の通りに設定した見やすいmanman colとかman vimとかして自分で調べてみよう!

*nix環境でC++コードを書き殴るのに最高に便利なツールを作った

ファイル中にコンパイルフラグを含められるのと、そのままファイルを実行する形式でガンガン書けるので我ながら非常に便利に今のところ使えている。

ちょっとコードをテストしたいとかだと http://melpon.org/wandbox/ 使えば良いんだけど、FreeBSDではどうなるんだーSolarisではどうなるんだーとかいうのは Wandbox で書けないので。

bash の trap を複数指定する方法

bashスクリプトでシグナルハンドラを定義出来るtrapは大変便利だが、trap複数回呼び出すと最後に書いたtrapの内容で上書きされてしまう。

↓例 melpon.org

別段シグナルハンドラを複数定義したいことも普通は無いが、0 番(終了時に必ず呼ばれる)には結構指定したいものが増えがちではないだろうか。

そこで、自前で複数保持出来るtrapを今即興で書きました

# zlib/libpng License
TRAP_COMMAND_STR=()

function trap() {
  TRAP_COMMAND_STR[$2]="${TRAP_COMMAND_STR[$2]} $1 ;"
  builtin trap "${TRAP_COMMAND_STR[$2]}" $2
}

どんどん;で区切って追加することで実現している。 なお、これだとシグナルハンドラのリセットが出来ないのでまぁそういう時はbuildin trapか自前のtrapを弄るか。

↓動作例

melpon.org

mod_rewrite を使ってブラウザのURL欄には http://hoge.com/fuga と表示しつつページの中身は http://hoge.com/index.cgi/fuga を表示させる方法

.htaccess ファイルに以下のように書く

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^.* - [L]
RewriteBase /
RewriteRule ^(.*)$ index.cgi/$1 [L]

Mojolicious::Lite を使ってて cgi だろうと単体で動かしてる時だろうと同じアドレスに出来るようにしたかったのが動機。