【tc厨が】bash3.0登場!!【嫉妬する】
ついに出たぞ、おマイら。俺はついさっきコンパイルしたばかりだ。
まだしっかりドキュメントを読んでないのでその破壊力は未知数
だが
$ echo {1 .. 5}
1 2 3 4 5
つうのは気に入ったぞ。
$ cat <<< hoge
hoge
って3.0から? "\ek":copy-backward-word
Control-k: "\ek\C-y"
cp hoge C-k
で
cp hoge hoge
になるので、バックアップを作るときやファイル名を変えるときに便利。 ファイル名をちょこっと変えるのに、ほとんど同じ
ファイル名を2回入力するのは面倒じゃん。 人によってやることは全然違うから
自分が便利だと思っても、他人が便利だと思うのは大間違い ちょっとしたtipsを顔真っ赤にして否定するのはどうかと思うな 自分の便利は他人の邪魔って言うのは昔から良く言われていること
>>104
便利だと思ってる本人はそれがわからないから問題 それはいいけど、そんなにムキになって
tips公開を阻止するのはなぜですか? 必要か不必要かは見ている人が勝手に判断すればいいと思うんです
必要と思う人はありがたく使わしてもらえばいいし、不要もしくは改良を
要する人は使わない、もしくは改良後をフィードバックすればいいし
みんなで幸せになろう 改良。
Control-k: "\C-w\C-y \C-y"
というか、前のやつピリオドを含むファイル名でテストしてなかった(笑) じゃあ自分のサイトでやればいいんじゃないのか?
例えばここに無駄な書き込みをする事によって、次に見る人がいれば転送量が増える。
その転送量が増える事によって、また無駄な商用サービスが始まってくんでしょ
この書き込みが無だって言うって言うのも無駄ね。
この書き込みで以下のこの書き込み以上の書き込みを抑制できるのなら
無駄にはならない >>109はどうもウェブ上で目にするもの全てが自分のためにならないと
気が済まない人らしいぞ。 >自分が便利だと思っても、他人が便利だと思うのは大間違い
体験談からこれは自分も同感。 使いなれてみないとわからない便利さみたいなのもあるよ。
C-t なんて初めは使いにくくて意味不明だったが、
しばらく意識して使ってたらなくてはならない操作になった。
だから自分にとって C-t は便利なコマンドなのだが、
C-t イラネという人の気持ちもわかるし、
イラネという人の何割かは使い慣れれば
好きになるんじゃないかとも思う。 > イラネという人の何割かは使い慣れれば
> 好きになるんじゃないかとも思う。
これがおせっかいなんじゃないかと思う
もちろんおせっかいだろうよ。
俺自身もあえて勧めたりはしない。 bash-3.2とreadline-5.2がリリースされました。 bash-3.2、ビルド時にエラーになるね。
(ru.poを適当にいじればOK) bash使いなんですが、bash 3のバグを発見しました(bash 2では問題なし)。
「プロンプトに色を使うと補間リスト(タブを何回か押したときに表示される)表示時にコマンドラインにゴミが入る」というものです。
【再現】
Cygwinのデフォルトのプロファイル(カスタマイズしている人は「bash --init-file /etc/profile」にてデフォで起動します)
は「PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '」というプロンプトを使っています。
これは複数行なのですが、\nを抜いて1行にするとバグを再現できます。
「PS1='\[\e]0;\w\a\]\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\$ '」
このプロンプトでgccと打ってタブを何回か押してみてください。
補間リストが表示されるとともに、コマンドラインに「gcccc」とゴミが2文字ほど入るはずです。
私が実際に使ってるプロンプトでは5文字ほどゴミが入ります。
bash 2ではなにも問題なかったのに、bash 3になったら突然これです。ほんとウザイです。
これはバグですよね?
GNUに報告した方がいいですか? >>121
bash3だけど俺の環境では再現しなかったよ。Cygwin特有の問題じゃない? >>122
まじですか〜、試していただいてありがとうございます。
おっしゃる通り私がバグを確認したのはCygwinにおいてのことでして、
あした学校にいったらLinuxがあるので、そこでは正常にふるまうかどうかを確認してきます。
この場合、メジャーバージョンの2とか3とかよりも下位のレベル(パッチレベル?)での違いかもしれませんね 学校のLinuxはbash 2でしたOrz
もちろん正常にふるまいます^^;
どうしたもんか・・・ >>125
bash3をhomeでコンパイルすればいいのでは? cmd()というシェル関数があるときに、これを呼ばず
$PATHからcmdを検索させる方法はありますか? >>128 では駄目で、>>129 でできました。ありがとうございます。
ついでに、ビルトインの command でも十分でした。 >>122
「uname -a」と「bash --version」を教えていただけますでしょうか?
>>126
なるほど。homeでのコンパイルは管理者権限いらないんですか? >>131
コンパイル用のコマンドのパーミッション次第だが、
たいていはインストール先をユーザ権限で置ける場所に
変更すればいけるはず。
./configure --prefix="$HOME/bin"
make
make install
とか。 いや、bashの場合は、bashコマンド1個のバイナリ単独で動くから、
自分の$HOMEあたりにソース展開して、普通に
./configure; make
したあと、bashファイルだけ、$HOME/bin あたりに手動コピーして使えばいい。
別に --prefixの指定は要らない。 >>133
メッセージカタログ使う場合は置き場所に困るよそれじゃ。 >>134
メッセージカタログなんて使わないってww つーか、bashの場合、メッセージカタログ自体ねーよ。
>>133 で、「1個のバイナリ単独で動く」って言ってるだろ。 メッセージカタログが存在するのは糞tcsh。
bashには存在しない。 >>131(>>121)
> なるほど。homeでのコンパイルは管理者権限いらないんですか?
>>125に「学校のLinuxは…」という発言があったので、Linux上でコンパイルする
ときの話ですよね。多くの学生が使う演習室環境とか、そういうのかな?
そのLinuxシステムでは、>>131だけでなく、多くのユーザがいるかと思います。
# たとえ>>131専用のマシンで動くLinuxシステムであっても、"root"と呼ばれる
# 管理者用ユーザアカウントが存在するはずです。
で、その(一般)ユーザ自身のためのディレクトリってものがあるはずです、それが
ホームディレクトリ。そのディレクトリの中は、そのユーザ自身が好きに使える
(ファイルの作成/編集/削除が自由に行える)。
ビルド時は、
・configureスクリプト実行時にMakefileが生成される
・コンパイル時にオブジェクトファイル(.oファイル)が生成される
・実行ファイルbashが生成される
といった変化があるわけですが、これら生成されるファイルがホームディレクトリ
の中のどこかであれば、
root権限なくてもビルド(コンパイル)できます
>>132が言っていることはそういうこと。ただし、>>132の、--prefixの指定は
間違っているな。それだと、実行ファイルbashは $HOME/bin/bin/ にインストール
されることになるから。
% ./configure --prefix="${HOME}/bash"
% make
% make install
こう実行すれば、${HOME}/bash/以下に、実行ファイルやマニュアルなどが入る。 >メッセージカタログ
tcshに存在する「メッセージカタログ」は独自のものだけど、それと同等のものが
bashにも存在したりしないか?ロシアの環境ではメッセージがロシア語になるとか、
そういうの。
bashでは、gettextを利用してこの機能を実現してると思うんだけど。 >>139
bashの場合、libcにある汎用エラーメッセジについては *.moを読みに行くが、
bash自体の bash.moは存在しないね。
だから、bash単独で動作させて桶。
LC_MESSAGES=ja_JP.eucJPとかなら、libc側のメッセージカタログはOS側にあるので、
「そのようなファイルやディレクトリはありません」みたいなメッセージは出るよ。
それに、仮にbash自身の bash.moが存在したとしても、
それを $HOME/locale/ja/LC_MESSAGES/bash.mo みたいな埋め込みPATHで
読みに来られたら、それはそれでいやだぞ。
bashの場合は必要ないが、bash以外のソフトの場合、
可能ならば ./configure --disable-nls して、メッセージカタログを
外してしまうのが吉。 >>138
どうも詳しい説明をありがとうございました。
実際にやってみましたので報告します。
まず、Linuxについてです。
最新のbash 3.2のソースを取ってきて、パッチも5まであてて
3.2.5の構成に成功しました。
ここで>>121のバグが再現されるかをテストしてみたら、再現されませんでした(正常にふるまう)。
次に、Cygwinについてです。
同様のソースとパッチで3.2.5を構成しようと試みましたが、なにやらエラーが起きました。
lib/glob/glob.cの484行目のREAL_DIR_ENTRY (dp)が原因のようで、これが構造体に置き換わっているのですが、
その置き換わったものが指しているメンバが存在しないようです。この部分を1または0にすると構成に成功しました。
しかし、どちらの場合もバグは再現されてしまいました。
以上のことを踏まえまして、
1.glob.cが今回のバグに関係のあるファイルの場合
このファイルが原因
2.glob.cが今回のバグに関係のないファイルの場合
Cygwinが原因
という結論を得ました。
どなたか、glob.cが何を司ってるファイルかわかる方はいらっしゃいますでしょうか?
また、Linuxでは問題ないのに、Cygwinでは問題が発生するというメカニズムの何らかの可能性をご存知の方はいらっしゃいますでしょうか? >>141
OpenBSD4.0(-stable)上のBash(3.1.17)では再現せず。
ソース見てないけど、ファイル名的にはグロビング関係なのかな。
そこまでやる気力があるなら自分でfixしちゃえばいいのに・・・。 bashの最新バージョンの、Linux(FedoraCore6)用RPMって出てたっけ? >>145
野良RPMは知らないけどFC6のデフォルトのリポジトリでは無いと思う。
漏れもFC6入ってるけど、3.1.6が今のところ最新の模様。 >>146
なるほど、FC6公式の(?)パッケージとしては3.1止まりなわけですね。
# 細かい話ですが、こちらでもインストールしているFC6では
# % rpm -qa | grep 'bash'
# bash-3.1-16.1
# %
# となりました。3.1.6ではなくて3.1-16かな?
ってことで、最新バージョンを使いたければ、ソースコードから自分でビルドして
rpmbuildとかで自分でパッケージ作ってインストールすることになるのかな?
(Linuxは使い始めてからまだ日が浅くてよく分かってなかったりしますが。。) >>147
ごめん、typoだった。仰る通り3.1.16だと思う。
(gnuの公式サイトでは17までpatchが出てるみたいだけど)
最新版を使いたければ、
http://ftp.gnu.org/gnu/bash/bash-3.2.tar.gz
http://ftp.gnu.org/gnu/bash/bash-3.2-patches/bash32-00{1..5}
を落としてきて普通にコンパイルすればOK。
(現時点での最新版は3.2.5だと思う)
あと、RPMについてはよくわからんので、L犬板あたりでよろ。
ちなみに漏れは普通にconfigure && make && make installで
/usr/local以下に入れちゃってる。
昔からの習慣のせいなのか、これが一番落ち着くんだよね。
あと、割合configureオプション多いから吟味した方がいいよ。 >>148(=>>146)
即レス感謝。
FreeBSDは結構使っていてソフトウェアは全部ソースコードからビルドしてるけど、
Linux系OS(FC6とか)でもやっぱりそうした方がいいのかなぁ。
*** 以下、bashに限らない話で、脱線気味
> 昔からの習慣のせいなのか、これが一番落ち着くんだよね。
確かにそれはある :)
んでも、configureスクリプトに渡すオプションなど、インストール方法を覚えて
おくのって難しいんだよね(つーか不可能)
インストールメモを作って保管してるけど、結構大変。その点、RPMは
・どのファイル(/bin/bash,/usr/share/man/man1/bash.1.gzとか)がブチ込
まれたか(% rpm -ql bash-3.1-16.1)
・いつインストールしたか等(% rpm -qi bash-3.1-16.1)
といった情報も保管されているので、その点は便利かも。
> あと、割合configureオプション多いから吟味した方がいいよ。
これも、ソースコードからビルドする人の特権ですな。bashのソースコードで使え
るオプションを全部把握するのは難しそうだけど、まぁ調べてみますです。 > FreeBSDは結構使っていてソフトウェアは全部ソースコードからビルドしてるけど、
> Linux系OS(FC6とか)でもやっぱりそうした方がいいのかなぁ。
ごめん、これについては何とも言えない。
うっかりしたこと言うと宗教戦争になりそうだ(w
個人的には、よく使うソフトはRPMは無視して
自分でソースからビルドしちゃってるなぁ。
cronを回して、差分パッチが出たら即座にver.upみたいな感じで。
##以下はネタ
> どのファイルがブチ込まれたか
make install | tee bash.log
> いつインストールしたか
ls -l bash.log autoconfがらみのソフトウェア(たいていの場合はそう)の場合、
% make (-n) install
の表示って複雑すぎて一見何をしているのかが分かりずらいんですよね。(丹念に
読めば理解できなくもないが…)
> > いつインストールしたか
> ls -l bash.log
それもいいけど、script(1)で記録してたのなら、最初と最後の1行に時刻が記録
されてるだろうから、それを見るという方法もありますな。
まぁ、スレ違い気味なんでこの辺にしときましょうか
> cronを回して、差分パッチが出たら即座にver.upみたいな感じで。
激しいっすね。さすが checkinstallというソフトを使うのもいいよ。open関係をhookして
どこに新しいファイルがインストールされたか記録できる。
bash3 になってから zsh みたいに command history に command を実行した
日時も記録する機能が加わっていたみたい、知らんかった。
いつのまにかbash32-015まで出てたね・・・ #!/bin/sh -x
cmd
cmd
#ここからこのシェルのstderrの出力をファイルにリダイレクトできますか?
cmd
cmd
>>161
うおおおおおおおおおおおおおおおおお
知らなかった・・・
ありがとうございます。 read -e のreadlineの処理で、
この入力履歴を独自のヒストリーファイルに保存することってできますか? bash32-025
readline52-007 今頃になってC-rの存在に気がついてウンコちびった >>165
俺も昨日、知ってびっくりした。マニュアルやドキュメントはまじめに読まないといかんね ついでにヒストリー数を10000くらいに増やしておくと余計便利。 $ echo $'a\nb\tc'
a
b c
$ x=a
$ echo $x
a
$ x+=b
$ echo $x
ab
bash3 ってこんな事もできるんだな。 bashの方が、tcshよりも先に登場したので、その説明には無理がある。 >>174
bash - sh = tcsh - csh
これでどうだ。
追加機能はファイル名補完機能とか、TABでの補完、
ヒストリの再利用、コマンドライン編集あたりか? > < * " ' ( ) をシェルが解釈できなくする方法ありますか >>176
* については set -f
その他については set -f では無理。
その都度クォートするしかない。 パッチ キタコレ
bash32-033
readline52-012 bash3 の話でなくて申し訳ないが
rbashをうまく使ってサービスみたいなものを運用している香具師いる?
単に
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/363rbashuser.html
を参考にしつつ 使えるコマンドを制限するしか
おもしろいネタは無いんだろうか
readline52-013
bash32-048 bash-4.0-rc1.tar.gz
誰か使ってる? bash 4.0 がでたみたいだな。
3.0 系と何が変わったか、誰か教えてくれ 4.0 の変更点
- POSIX sh との乖離が大きくなった
4.0になってもバッチの1行目には
#!/bin/sh
って書かれるんだろうな。 JCLの亊?とは思うけど、あまり気にならないなぁ。
シェルスクリプトをシェルと言うのは、凄く気になる。
まぁMS-DOSのバッチファイルからの流れだろうなぁ
シェルスクリプトをバッチと呼ぶのは。
メインフレーム文化からというよりは。 >>190
自分がどの拡張構文使っているか分からない時は、
#!/bin/bashとか#!/bin/zshとか書いてる。
>>192
文脈で大体分かるけど、たしかにイラっとすることもあるね。