bashで補完スレ

1complete
垢版 |
NGNG
bash2で補完機能が強化されているようですが
皆さんいかがお過ごしでしょうか?
NGNG
man bash2 に結構書いてあった。
しかし -C の挙動が理解できない。
NGNG
スクリプトとかで /bin/bash が使われた時に
complete 無いぞ メッセージが出るんで
[ "$BASH_VERSINFO" = "2" ] で回避してみた。
27名無しさん@お腹いっぱい。
垢版 |
NGNG
http://www.KU3G.org/negi/diary/?20020222#200202222
ここで少しだけ紹介されていた。ここにあるリンク先
http://www.caliban.org/bash/index.shtml#completion
にあるbash-completion-20020225.tar.gzのなかにたくさん
補完候補があったよ。但し、2.05以降でしか使えないみたい
だから2.04とかのひとはがんばってgoogleとかで探さないとね。
28名無しさん@お腹いっぱい。
垢版 |
NGNG
>>27
ありがとうage
29名無しさん@お腹いっぱい。
垢版 |
NGNG
>>26
対話的利用時の設定は、
PS1が設定されている場合だけ行うのが、Bourne系shellの流儀です。

if [ ${PS1:-not_interactive} = not_interactive ]; the
対話的利用時の設定(alias,completeなど)
fi

こうしないと別の人間が/のscriptを使った時に、
aliasの設定等により別の動作をしてしまう可能性があります。

bashは、$-にiが含まれていても対話的利用と分かります。
NGNG
>>29
> bashは、$-にiが含まれていても対話的利用と分かります。

$-かぁ。知らなかった。
NGNG
>>29
> こうしないと別の人間が/のscriptを使った時に、

#! /bin/bashのscriptを使った時に、

の編集ミスね。
NGNG
誰か >>10
> と真似してみたところディレクトリは補完されないようです
を解決する関数を書いた人はいませんか? いたらウプして下さい。
bash-completion-20020306 を試してみたけどなさそうです。
3332
垢版 |
NGNG
誰も反応してくれないので自分で書いたよ。
もっとシンプルに書けんもんかのう…せめて関数にパターンが渡せれば。
いちいち関数定義なんかしてられんよ。

_gs()
{
local cur
cur=${COMP_WORDS[COMP_CWORD]}
COMPREPLY=( $( compgen -d -- $cur ) \
$( compgen -f -X '!*.@(?(e)ps|?(E)PS)' -- $cur ) )
return 0
}
complete -F _gs -o filenames gs ghostview

NGNG
halt
35名無しさん@お腹いっぱい。
垢版 |
NGNG
reboot
NGNG
login:
NGNG
login: root
Password:
38名無しさん@お腹いっぱい。
垢版 |
NGNG
/sbin/shutdown -r now
NGNG
login:
40名無しさん@お腹いっぱい。
垢版 |
NGNG
>>32
おれももディレクトリを補完できないで悩んでいたんだ。ありがとう。
33を試させてもらいます。
4140
垢版 |
NGNG
ずいぶん返事が遅れてすまぬ。
33でうまくいってます。
しかし33のいうとおり一つ一つ関数定義するのメンドイね。
何かいい方法ないかな?
NGNG
bashがよくわ<tab>
43名無しさん@お腹いっぱい。
垢版 |
NGNG
>>42
% bashがよくわ<tab>
からない かる かりたい らう
% bashがよくわ_
NGNG
英語がよくわ<tab>
NGNG
% 英語がよくわ<tab>
たしを苦しめる
% 英語がよくわ_
46名無しさん@お腹いっぱい。
垢版 |
NGNG
$ tcshやzshはどうして<Ctrl-D>
で保管をリスティングするのだろう?
$ tcshやzshはどうして

$ promptを%<tab>
って書いている奴は本当にbash使ってるのかと(略
$ promptを%
NGNG
俺zshだけど%使ってる。
48名無しさん@お腹いっぱい。
垢版 |
NGNG
bashでtcshみたいに
$ s
って入力してから履歴見ると
履歴の中で「s」で始まるのだけ表示してくれるようにって出来る?
NGNG
>>46
コマカイコトイウナヨーオマエ
NGNG
>>46
% 俺は途中乗|<tab>
換でbash使い始めたけど$は落ち着かないから%にしてる
% 俺は途中乗|
% |
% う|<tab>
うるせーばか
% う|
NGNG
「bashがマルチバイト文字に正式対応」
http://slashdot.jp/article.pl?sid=02/07/22/1936207

これって日本語のファイル名とかもlsで表示できるってこと?
NGNG
こういう時はageたほうがいいような。

よくわからんのでさっそく2.05bをいれてみたんだが、行の折り返しで化ける問題
もマルチバイト文字を2文字として認識してる問題も、まるっきり変わってない
ような気が。
buildの仕方に問題あったのかなあ。

あ、でも補完機能すごいね。
補完リストが1画面分より長いと、途中で止めてくれるわ。これは便利かも。

NGNG
いっしょに話題になったreadlineをインスコした。
readlineを使ったプログラム、うちの場合はPostgreSQLの
フロントエンドpsqlなのだが、ロケールの設定を日本語に
しておくと、漢字部分でのカーソル移動がちゃんと2文字分
になってて、削除も漢字1文字ごとやってくれる。
多分新Bashもこんな感じなのかな。psqlではおかげで
日本語レコードの操作が楽になったので新Bashでは
ターミナルでのマルチバイト処理がしやすくなってる
と推測。あくまで推測 (w
5453
垢版 |
NGNG
まてよ、psqlは前からマルチバイト扱えたっけ?
うーん、今では確認しようがない。スマソ。
NGNG
>>54
psqlは日本語パッチがあって、それ当ててれば日本語の編集がウマーだったよ
うな気がする。
NGNG
>>55
今のpsqlにはパッチ当ててない。それで日本語が
まともになったということは。やはりreadlineですかね。
なんかglibcといい、bashといい、マルチバイト対応が
すごいですね。ロケールの切り替えだけで多言語対応できる
Unixマンセー。
NGNG
>>52
コンパイルオプション増えた?>自分でやりって言わないで・・
NGNG
>>52
libcがヘボいと(たぶん)configure時に「マルチバイト駄目じゃん」と
判断されて従来通りコンパイルされるよ。
だからCitrus無しのNetBSDとかCygwinなんかだと悲しい…
59名無しさん@お腹いっぱい。
垢版 |
NGNG
バスケットシューズあげ
NGNG
バトミントンシューズsage
NGNG
>48
.inputrc に

"\C-n":history-search-forward
"\C-p":history-search-backward

とか書くとか。
62名無しさん@お腹いっぱい。
垢版 |
NGNG
bashのパターン照合について
複数のパターンで文字列を抽出
する方法ありましたらご指南お願いします。
(もっとも一旦変数に格納し、分ければ
いいのですが、可能ならばその方法を知りたいです。)

例えば、
$data="/export/user1/test-20020909.log"
で20020909の文字を抽出する場合、一度に
${${data##/*-}%.*}
の様にしたいのですが、
bad substitution
とエラーが出てしまいます。
NGNG
>>62
こっちで。

シェル、オークの質問コーナー
http://pc.2ch.net/test/read.cgi/unix/1000303370/
NGNG
>>62
誘導ども。
逝ってきます。
65名無しさん@お腹いっぱい。
垢版 |
NGNG
補完じゃないんですけど教えてください。

emacsと同様に ALT+Backspaceで一語消したいのですが、
どうやったら良いのでしょうか?
NGNG
>65
あり、 ALT+BS ってデフォルトで消えなかったっけ?

ALT+h なら .inputrc に下を書けばいいんだけど。。。

"\M-h":backward-kill-word
6765
垢版 |
NGNG
>>66
あっ、すみません!
家の中に、デフォルトで消えるbashと消えないbashがあるのに気付きました。

#うーん、なんでだろう??
NGNG
>67
version の違いですかね?

挙動の違いといえば、チルダの展開も変わってたりしてハマりますなぁ。。。
6967
垢版 |
NGNG
それが、どうもバージョンじゃないみたいなんで悩んでます。(--versionしてみた)
しかも、消せるほうのbashのバイナリを消せないホストにコピーすると、ちゃーんと
消せるようになるんで、設定ファイルとかのせいでも無いみたい...
コンパイル時のオプションかと思うんですけど、もうコンパイルしたときの
作業したソースとか全部消しちゃったんで、ちゃんと動かせるオプション試行錯誤して見つけないと
確かめられなさそう...(コンパイル時のオプション情報なんてバイナリに残らないですよね...)
NGNG
bashで
"\ep": history-search-backward
"\en": history-search-forward
をC-pとかに割り当てたい
NGNG
cat .zsh-history |xargs ssh remote cat >> .zsh-history
NGNG
aae
73山崎渉
垢版 |
NGNG
(^^)
74山崎渉
垢版 |
NGNG
(^^)
75名無しさん@お腹いっぱい。
垢版 |
NGNG
$ このス^I
このスレって、もう死に体だね!
$ このスレって、もう死に体だね!_
NGNG
>>70
割り当てろよ
77山崎渉
垢版 |
NGNG
(^^)
NGNG
あぼーん
79名無しさん@Meadow
垢版 |
NGNG
パラメータに入れた文字列を、パス展開させたいんだけど、
どうしたらようござんしょう?

例えば、

files="hoge*" && パス展開 && [ ${#files[*]} -ne 0 ]

とか、したいわけよ。
8079
垢版 |
NGNG
とりあえず、パス名展開はでけたが、配列になってない…(T_T)

> touch hogea hogeb hogec
> echo hoge*
hogea hogeb hogec
> files="hoge*" && echo ${#files}
5
> files="hoge*" && tmp=`echo $files` && echo ${#tmp}
17

で $files がパス名展開されてることが分かったが、

> files="hoge*" && tmp=`echo $files` && echo ${#tmp[*]}
1

むきーっ

8179
垢版 |
NGNG
もれはアホだー!!

> files=(hoge*) && echo ${#files[*]}
3
NGNG
あぼーん
NGNG
あぼーん
NGNG
どうせならmigemo呼び出して日本語ファイル名補完とかして欲すぃ。
誰か実装してたりしませんか。
NGNG
あぼーん
NGNG
>>56
PS1= の内容については、マルチバイト文字が認識されてないっぽい。
87名無しさん@お腹いっぱい。
垢版 |
NGNG
menu-completeは引数を受け取れるとmanに書いてあるけど、
こういう引数付きコマンドを.inputrcで何らのキーに割り当てるにはどうするの?
色々やってみたんだが…。
88名無しさん@お腹いっぱい。
垢版 |
NGNG
kshとbashどちらを先に覚えた方がいいですか?
NGNG
あぼーん
NGNG
cygwinのbashには/etc/bash_completionが入ってないなー。
NGNG
Mainte
92名無しさん@お腹いっぱい。
垢版 |
NGNG
bashにはtcshのコンプリート機能はないにょ?
NGNG
bash には bash のコンプリート機能があるにょ。
94名無しさん@お腹いっぱい。
垢版 |
NGNG
>>93 あったにょ?知らなかったにょ
NGNG
     ∧_∧  ∧_∧
ピュ.ー (  ・3・) (  ^^ ) <これからも僕たちを応援して下さいね(^^)。
  =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
  = ◎――――――◎                      山崎渉&ぼるじょあ
96コンプマン
垢版 |
NGNG
今日はすごい裏技を紹介します。
題して、 「 1から255までループ 」

まず、 1から255までの連続したファイル名を用意します。
中身は空でかまいません。
そのファイルをどこかのディレクトリに格納します。

そして、そのディレクトリに移動したら
for i in *; do echo $i; done

これでばっちり1〜255までループできますね!

【応用編】
1万回ループしたいときは、ファイルを
1〜10000まで用意するといいですよ
97名無しさん@お腹いっぱい。
垢版 |
NGNG
>>96
$ for i in *; do echo $i; done
1
10
100
101
102
103
104
105
106
107
108
109
11
110
111
...

先生!順番が…
98コンプマン
垢版 |
NGNG
>>97
新たな投稿ありがとう。 ミッションスタート!!

ファイル名を

000
001
002
・・・
254
255

と書き換えましょう
NGNG
裏技やるのにファイル作るの面倒な人用↓
a=0;while [ $a -le "255" ];do touch $a;let a="${a}+1";done

こいつで裏技バッチリ。
100コンプマン
垢版 |
NGNG
応援ありがとう!!
だが、それではファイル名が>>97のようになってしまい
とても不完全なものとなるのでした。
そこで>>99を添削してみました。 caseが美しいですね。

a=1;
while [ $a -le "255" ]; do
case `echo ${#a}` in
"1") s="00$a" ;;
"2") s="0$a" ;;
"3") s="$a" ;;
esac; touch $s; a=$((a+1));
done
NGNG
>>100
a=0;while [ $a -le "255" ];do touch `printf %03d\\n $a` ;let a="${a}+1";done
NGNG
>>101
\\nいらね〜・・・touch ``なしで実験したんだよもん
NGNG
桁数そろえるには、こんな感じかな。
for i in *;do mv $i `echo $i |sed "s/^\([0-9]\)$/00\1/;s/^\([0-9][0-9]\)$/0\1/"`;done
NGNG
GNU coreutils の seq でいいよ...
105コンプマン
垢版 |
NGNG
>>104
for i in `seq -w 255`; do touch $i; done
と、こうくるわけですか。さすが グニュー使いは裏技使い!
もちろん動作も最も速くて完璧超人ですか・・・

でももしこれが 255000 だったりしたらたいへんです
なかなか始まりません。 これが今日の裏技。
NGNG
seq -w 255000 | while read i;do echo $i;done
だと、ちっとまし?
NGNG
>>105
のまえにラインバッファの限界こないか?
xargsとかつかいな
NGNG
>>104
> GNU coreutils の seq でいいよ...

zsh だとビルトインですが何か?
109コンプマン
垢版 |
NGNG
>>107
それは大丈夫だ。
100万個のループでも我慢して待てば動作するぞ!

だが 1000000 は 1e+06 と表現されるから注意が必要だ。
キミも渡来!
NGNG
>>108
何でもかんでも built-in にするのキモい。
NGNG
>>110
思想的にちょっぴり同意。
NGNG
busybox立場無いなぁ とか思ったりしたけど バッシュレ?
NGNG

built-inだと誇らしげに言ってるあたりがイタイね
114名無しさん@お腹いっぱい。
垢版 |
NGNG
void main (){}

をa.outとコンパイルして

a.out && echo "sage"

とするとsageと表示されるのですがそんなものなのですか?
返り値を返してはいないのですが。。。
不定の結果なのでしょうか?
115名無しさん@お腹いっぱい。
垢版 |
NGNG
>>114
./a.out; echo $?
だとどう?
NGNG
>>110
> 何でもかんでも built-in にするのキモい。
>>113
> built-inだと誇らしげに言ってるあたりがイタイね

そうかな。coreutils, bash を両方インストールするのが無駄
117名無しさん@お腹いっぱい。
垢版 |
NGNG
>>116
coreutils = fileutils + textutils + sh-utils
どのみち使う。無駄なわけない
NGNG
zsh はいつか perl も built-in にしそうだな。
NGNG
ゆくゆくは Emacs を
NGNG
>>117
> coreutils = fileutils + textutils + sh-utils
> どのみち使う。無駄なわけない

Linux ゆーざだけでは?
NGNG
ああ、>>117 の 3 つがまとまった coreutils は GNU の産物だからね。
Linux 使いは coreutils パッケージとしてまとめてインストールしておいたほうが
本気で細々したプログラム群を個別にインストールしなくていいので楽。
coreutils が要らないって人は別のパッケージングや管理方法を使ってるんでしょう。たぶん。
NGNG
>>121
> Linux 使いは coreutils パッケージとしてまとめてインストールしておいたほうが
> 本気で細々したプログラム群を個別にインストールしなくていいので楽。

板違い。

> coreutils が要らないって人は別のパッケージングや管理方法を使ってるんでしょう。たぶん。

OS 附属のものを使ってます。
NGNG
>>112
あれは限定された環境で使うためのものじゃん。
NGNG
補完の話じゃなくて申し訳ないが質問。

十年以上 tcsh使ってて、
たまーに Linuxとか cygwin入ってる Windowsとかで bashを使うことが
あって、そのたびに面倒だなーと思ってるんだけど

bash で tcsh の implicitcd に相当することをするにはどうするの?
(ディレクトリ名タイプだけで cdする機能)
NGNG
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias .....='cd ../../../..'
...
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況