とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

「入門bash 第3版」を読む(4)

Windows な私が障壁を乗り越えながら Cygwin + bash との愛を深める記録。

進捗

100/348

メモ

  • 4章 基本的なシェルプログラミング
  • ふむふむ。unset -f で関数定義を削除できる
  • ふむふむ。優先順位。エイリアス→キーワード→関数→組み込みコマンド→スクリプト,実行可能ファイル
  • ふむふむ。紛らわしいときは typeコマンドで確認。
  • ふむふむ。位置パラメータね
  • ふむふむ。ローカル変数。local 文で。
  • 文字列演算子。置換演算子
  • スクリプトを走らせようとして超はまる。原因は改行コードだった。二日つぶれた。
    • LFで統一しておきましょう。
    • 文字コードはShiftJIS
    • Meadow 3 でデフォルトをLFにしようとしたけど,うまくいかない。
    • (set-language-environment-coding-systems "Japanese" 'unix) でエラーを吐く

An error has occurred while loading `e:/software/meadow/.emacs':

Wrong number of arguments: #[(language-name) <このへん制御コードが混じっていて貼り付けられない(;;)> [language-name priority default-coding default-buffer-file-coding-system eol-type categories get-language-info coding-priority coding-system-eol-type mapcar coding-system-category set-default-coding-systems (0 1 2 unix dos mac) coding-system-change-eol-conversion set-coding-priority update-coding-systems-internal default-sendmail-coding-system] 5 1769017], 2

    • 仕方ないからファイルごとに個別対応…。おかしいと思ったら dos2unix
  • 山場を越え,プロンプト文をカスタマイズ。

長い(詳細)バージョン

console bash 3.2.25@HOST@USER_NAME
Thu Nov 22 14:59:15 1recents, 1commands, 0jobs
~ $>

短い(簡略)バージョン

~ $>

普段は勉強のため長いバージョンを使う。プロンプトをスッキリさせたいとき,スクリプトの実行結果を貼り付けるときに短いバージョンを使う。PS1を毎回手入力変更していたら日が暮れるので .bash_profile の末尾を次のように変更。

# PS1="\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$"
L="\l \s \V@\H@\u\n\d \t \!recents, \#commands, \jjobs\n\w \$>"
S="\w \$>"
PS1=$L
alias lmode='PS1=$L'
alias smode='PS1=$S'

lmode あるいは smode と入力するだけで切りかえか可能に。

  • タスクに挑戦

タスク4-1

myfile
5       Depeche Mode
2       Split Enz
3       Simple Minds
1       Vivaldi, Antonio
highest
# highest filename [howmany] [-h]
#
# filenameファイルの内容を数字の大きい順に
# howmany行表示する。
# howmanyのデフォルト値は10

filename=$1
filename=${filename:?"missing."}
howmany=$2
header=$3
echo -e -n ${header:+"ALBUMS  ARTIST\n"}
sort -n -r ${filename} | head -${howmany:=10}
実行結果
~ $>./highest myfile
5       Depeche Mode
3       Simple Minds
2       Split Enz
1       Vivaldi, Antonio
~ $>./highest myfile 2 -h
ALBUMS  ARTIST
5       Depeche Mode
3       Simple Minds
~ $>

いい感じ。-h オプションがかわいそうだけど,今のところ対応方法が分からないので放置。