Archive for category Linux

GNU Core Utilities のソースってどこにあるの?

1
git clone git://git.sv.gnu.org/coreutils

これで最新の lschownkill などのソースが手に入ります。うれしいですね。

C言語の初学者や、オレオレutilsを作りたい方や、Macのcoreutilsを一からビルドしたい方に役立つTipsでした。

参考

Ubuntuで使われているcoreutilsのソースは、 apt-get source で入手可能とのことです。

上記参照。

 

CUIで電卓

Time to Read

1分

cd と打ち間違えることで有名な dcbc$(()) 記法などを利用する。

# calcコマンド等は最初からではUbuntuに入っていないし、特に言及しない。

以下のようなfunctionを適当な .bashrc 類のファイルに定義しとくと、ただ数字を並べて全部の和を出したいときに楽。

1
2
3
4
5
6
7
8
9
10
function tasu {
  [ $# -le 0 ] && return 1
  ( echo $@
    shift
    while shift
    do
      echo +
    done
    echo p ) | dc
}
1
2
3
4
5
$ tasu 100 200 350
650
# 1~10の和
$ tasu `seq 1 10`
55

関数名については、 sum コマンドは既に存在するのでこんなことになった。あと、この関数は3分ぐらいで書いた。

僕はこのコマンドを家計簿つけるときに使ってますが、ふと思いついたんだけどコマンドライン家計簿ユーティリティってあると便利じゃね。一部の特殊な方々に。。。

関連

サブコマンド付きのコマンドラインユューティリティを作成する際に便利そうなRubyライブラリがあった。

 

Ubuntu Maverickでは、aptitude install ruby1.9.1でruby1.9.2が入る

Time to Read

1分

な、なに言ってるのかわかんねーと思うが(AA略

1
2
3
4
5
6
7
$ sudo aptitude install ruby1.9.1
The following NEW packages will be installed:
  libreadline5{a} libruby1.9.1{a} libyaml-0-2{a} ruby1.9.1 
......
 
$ ruby1.9.1 -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [x86_64-linux]

ruby1.9.2というパッケージは、1.9.1へのエイリアスとなっているようです。

1
2
3
4
5
6
7
8
$ aptitude search ruby1.9
......
p   ruby1.9.1                                                 - Interpreter of object-oriented scripting language Ruby 1.9.2        
p   ruby1.9.1-dev                                             - Header files for compiling extension modules for the Ruby 1.9.1     
p   ruby1.9.1-elisp                                           - Emacsen 用 ruby モード                                              
p   ruby1.9.1-examples                                        - Examples for Ruby 1.9                                               
p   ruby1.9.1-full                                            - Ruby 1.9.1 full installation                                        
v   ruby1.9.2                                                 -

ということなので、みなさん騙されないように気をつけましょう。そして安定版のRuby 1.9.2が大変簡単に使えるようになってうれしいですね(まとめ)。

追記

Debian Sqeeze でもそうなってるらしい。

 

シェルスクリプトって関数型っぽくない?

Time to Read

5分

※ 以下の記事のシェル処理系はすべてbashです。

たとえば、自分で作った「DoHoge.rb」というバッチについて、「-d {日付}」という起動方法ができるんだけれど、60日前から今日までの日付を順に指定して起動したいなあ~ と思ったとき、僕はこうした。

seqコマンドで60~0の数字のセットを作る。

1
2
3
4
5
6
7
8
$ seq 60 -1 0
60
59
58
57
56
#...
0

その出力をxargs経由でdateに噛ませて、日付のセットにする

1
2
3
4
5
6
7
8
$ seq 60 -1 0 | xargs -i date -d -{}days +'%F'
2010-08-06
2010-08-07
2010-08-08
2010-08-09
2010-08-10
#...
2010-10-05

その出力をもう一回xargsに噛ませ、日数分のバッチ起動コマンドを生成

1
2
3
4
5
6
7
8
9
10
11
12
13
$ seq 60 -1 0 | xargs -i date -d -{}days +'%F' | xargs -t -i ./DoHoge.rb -d {}
./DoHoge.rb -d 2010-08-06
#……
./DoHoge.rb -d 2010-08-07
#……
./DoHoge.rb -d 2010-08-08
#……
./DoHoge.rb -d 2010-08-09
#……
./DoHoge.rb -d 2010-08-10
#……
#……
./DoHoge.rb -d 2010-10-05

ここまで書いてみて

という記事を見かけた。言わんとするところは同じで、「標準入力というリストをコマンドでフィルタする感じがすごく関数型っぽい」ということだと思う。

一点、map相当はwhilereadを組み合わせるのもいいけれど、やっぱりxargsとか、sedawkでフィルタする方が、コード量も短いしそれっぽいんじゃないでしょうか、と思いました。

yesは無限リスト」とかは本当にそんな感じな印象。

おまけ

Read the rest of this entry »

 

mp3 toolz – Ubuntuで快適に音楽を楽しむために

Time to Read

4分

今回、僕の環境を説明したりします。

Read the rest of this entry »