ksh

今更なんだけど。

ksh(Korn Shell)。

実はこれまでコマンドラインの編集機能、ファイル名の補完機能は無いと思っていたのだが、ある・・・という事が判った。

http://homepage3.nifty.com/owl_h0h0/unix/job/UNIX/tool/ksh.html

http://d.hatena.ne.jp/furya/20060620/1150814106


とはいえ、今更この使いにくいシェルを使うとは思えない。
やはりbashを使うと思う。


kshでコマンドヒストリ、コマンドライン編集を有効にする

確認
# set -o
# set -o
Current option settings
allexport        off
bgnice           on
emacs            off
errexit          off
gmacs            off
ignoreeof        off
interactive      on
keyword          off
markdirs         off
monitor          on
noexec           off
noclobber        off
noglob           off
nolog            off
notify           off
nounset          off
privileged       off
restricted       off
trackall         off
verbose          off
vi               off
viraw            off
xtrace           off

emacs、viがoffになっているのでコマンド編集等が使えない。

# set -o vi
viがonになる。

# set +o vi
viがoffになる。

# set -o emacs
emacsがonになる。

# set +o emacs
emacsがoffになる。


例(1)としてviを使って履歴、編集を行ってみる。
# set -o vi
# [esc]k
ヒストリが表示される。
キーバインドはviと同様に、jkで上下。

編集のキーバインドはviと同様のhlで左右。

[esc]でモード変更。
iやx、d等、viのキー操作がそのまま利用できる。

例(2)としてemacsを使って履歴、編集を行ってみる。
# set -o emacs
# [esc]
# [ctrl]-p
ヒストリが表示される。
キーバインドはemacsと同様に、[ctrl]-p、[ctrl]-nで上下。

編集のキーバインドはemacsと同様の[ctrl]-f、[ctrl]-bで左右。


(3)コマンドラインの補完
[esc] \
で補完できる。(TABキーではない)

候補一覧の表示は
[esc] =
で表示される。


なんだ、実はkshって慣れると使いやすいんじゃないのか?
ホント、今更だけど。




コマンドライン編集の方法(2)
# fc
環境変数FCEDITで設定されたエディタが起動されて、エディタで編集したコマンドを実行することができる。

コマンドヒストリを参照して編集して、実行する場合は
# fc  for
のように入力する。この場合コマンドヒストリの中で最後に実行された for から始まるコマンドが参照されて、エディタが起動される。

コマンドヒストリを参照して編集せずに、実行する場合は
# fc -e - for
のように入力する。この場合コマンドヒストリの中で最後に実行された for から始まるコマンドが参照されて実行される。


for文
for 変数 in リスト ; do コマンド ; done
リストの内容物が無くなるまで、変数に代入されてぐるぐる実行される。

select文
select 変数 in リスト ; do コマンド ; done
リストの内容物がユーザに提示され、ユーザが選択した値が変数に代入されてぐるぐる実行される。
ちなみにプロンプトは環境変数PS3で設定された値が表示される。