bashで補完スレ
bash2で補完機能が強化されているようですが 皆さんいかがお過ごしでしょうか?
>>1 > bash2で補完機能が強化されているようですが > 皆さんいかがお過ごしでしょうか? 氏ね complete -d cd complete -c man complete -u {su,finger} autoload -U compinit;compinit gccの引数として*.cを補完させたいときどうすればいいの? mv !$ ~/trash みたいなAlias書きたいのですが、、、 どうかいたらいいですかね? >>6 bash-2.0.5aの examples/complete/complete* を眺めた感じでは complete -f -X '!*.c' gcc だと思う。誰か試してくれ >>8 !$が何か知りませんが function rm () { command mv $@ ~/trash/ ; } とかどうでしょう? rmとmvのオプションの違いとかを吸収していませんが >>9 カレントディレクトリのファイルはうまく補完できるみたいです lprとかで印刷するときなどにディレクトリ名も補完しながら 探せると便利だと思うんですが complete -f -X'!*.ps' lpr と真似してみたところディレクトリは補完されないようです >>10 rm -r怒られるのちと痛いんでsedかawkでちょっとだけ 引数修正したいね。 >>12 悩むなら bash より zsh 使えば良い。 >>16 FreeBSDやLinuxのほとんどのディストリビューションに はいってますよ。 ええと、自慢の.bashrcをアプし合うスレはここですか? >>19 いいえ。ゴミなら/dev/nullにどうぞ。 おまえらのシステムにはこういうゴミが有りますか? /usr/man/man1/..1.gz /usr/man/man1/:.1.gz complete: usage: complete [-abcdefjkvu] [-pr] [-A action] [-G globpat] [-W wordlist] [-P prefix] [-S suffix] [-X filterpat] [-F function] [-C command] [name ...] 使い方が判らんのれす >>19 .bashrc とりあえずネラーなら MAILPATH="/var/mail/mona?メール キタ━━━━━━(゜∀゜)━━━━━━ !!!!! " MAILCHECK=5 だろう。メールボックスのパスは自分で変えろよ。 man bash2 に結構書いてあった。 しかし -C の挙動が理解できない。 スクリプトとかで /bin/bash が使われた時に complete 無いぞ メッセージが出るんで [ "$BASH_VERSINFO" = "2" ] で回避してみた。 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とかで探さないとね。 >>26 対話的利用時の設定は、 PS1が設定されている場合だけ行うのが、Bourne系shellの流儀です。 if [ ${PS1:-not_interactive} = not_interactive ]; the 対話的利用時の設定(alias,completeなど) fi こうしないと別の人間が/のscriptを使った時に、 aliasの設定等により別の動作をしてしまう可能性があります。 bashは、$-にiが含まれていても対話的利用と分かります。 >>29 > bashは、$-にiが含まれていても対話的利用と分かります。 $-かぁ。知らなかった。 >>29 > こうしないと別の人間が/のscriptを使った時に、 #! /bin/bashのscriptを使った時に、 の編集ミスね。 誰か >>10 の > と真似してみたところディレクトリは補完されないようです を解決する関数を書いた人はいませんか? いたらウプして下さい。 bash-completion-20020306 を試してみたけどなさそうです。 誰も反応してくれないので自分で書いたよ。 もっとシンプルに書けんもんかのう…せめて関数にパターンが渡せれば。 いちいち関数定義なんかしてられんよ。 _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 >>32 おれももディレクトリを補完できないで悩んでいたんだ。ありがとう。 33を試させてもらいます。 ずいぶん返事が遅れてすまぬ。 33でうまくいってます。 しかし33のいうとおり一つ一つ関数定義するのメンドイね。 何かいい方法ないかな? >>42 % bashがよくわ<tab> からない かる かりたい らう % bashがよくわ_ % 英語がよくわ<tab> たしを苦しめる % 英語がよくわ_ $ tcshやzshはどうして<Ctrl-D> で保管をリスティングするのだろう? $ tcshやzshはどうして $ promptを%<tab> って書いている奴は本当にbash使ってるのかと(略 $ promptを% bashでtcshみたいに $ s って入力してから履歴見ると 履歴の中で「s」で始まるのだけ表示してくれるようにって出来る? >>46 % 俺は途中乗|<tab> 換でbash使い始めたけど$は落ち着かないから%にしてる % 俺は途中乗| % | % う|<tab> うるせーばか % う| 「bashがマルチバイト文字に正式対応」 http://slashdot.jp/article.pl?sid=02/07/22/1936207 これって日本語のファイル名とかもlsで表示できるってこと? こういう時はageたほうがいいような。 よくわからんのでさっそく2.05bをいれてみたんだが、行の折り返しで化ける問題 もマルチバイト文字を2文字として認識してる問題も、まるっきり変わってない ような気が。 buildの仕方に問題あったのかなあ。 あ、でも補完機能すごいね。 補完リストが1画面分より長いと、途中で止めてくれるわ。これは便利かも。 いっしょに話題になったreadlineをインスコした。 readlineを使ったプログラム、うちの場合はPostgreSQLの フロントエンドpsqlなのだが、ロケールの設定を日本語に しておくと、漢字部分でのカーソル移動がちゃんと2文字分 になってて、削除も漢字1文字ごとやってくれる。 多分新Bashもこんな感じなのかな。psqlではおかげで 日本語レコードの操作が楽になったので新Bashでは ターミナルでのマルチバイト処理がしやすくなってる と推測。あくまで推測 (w まてよ、psqlは前からマルチバイト扱えたっけ? うーん、今では確認しようがない。スマソ。 >>54 psqlは日本語パッチがあって、それ当ててれば日本語の編集がウマーだったよ うな気がする。 >>55 今のpsqlにはパッチ当ててない。それで日本語が まともになったということは。やはりreadlineですかね。 なんかglibcといい、bashといい、マルチバイト対応が すごいですね。ロケールの切り替えだけで多言語対応できる Unixマンセー。 >>52 コンパイルオプション増えた?>自分でやりって言わないで・・ >>52 libcがヘボいと(たぶん)configure時に「マルチバイト駄目じゃん」と 判断されて従来通りコンパイルされるよ。 だからCitrus無しのNetBSDとかCygwinなんかだと悲しい… >48 .inputrc に "\C-n":history-search-forward "\C-p":history-search-backward とか書くとか。 bashのパターン照合について 複数のパターンで文字列を抽出 する方法ありましたらご指南お願いします。 (もっとも一旦変数に格納し、分ければ いいのですが、可能ならばその方法を知りたいです。) 例えば、 $data="/export/user1/test-20020909.log" で20020909の文字を抽出する場合、一度に ${${data##/*-}%.*} の様にしたいのですが、 bad substitution とエラーが出てしまいます。 補完じゃないんですけど教えてください。 emacsと同様に ALT+Backspaceで一語消したいのですが、 どうやったら良いのでしょうか? >65 あり、 ALT+BS ってデフォルトで消えなかったっけ? ALT+h なら .inputrc に下を書けばいいんだけど。。。 "\M-h":backward-kill-word >>66 あっ、すみません! 家の中に、デフォルトで消えるbashと消えないbashがあるのに気付きました。 #うーん、なんでだろう?? >67 version の違いですかね? 挙動の違いといえば、チルダの展開も変わってたりしてハマりますなぁ。。。 それが、どうもバージョンじゃないみたいなんで悩んでます。(--versionしてみた) しかも、消せるほうのbashのバイナリを消せないホストにコピーすると、ちゃーんと 消せるようになるんで、設定ファイルとかのせいでも無いみたい... コンパイル時のオプションかと思うんですけど、もうコンパイルしたときの 作業したソースとか全部消しちゃったんで、ちゃんと動かせるオプション試行錯誤して見つけないと 確かめられなさそう...(コンパイル時のオプション情報なんてバイナリに残らないですよね...) bashで "\ep": history-search-backward "\en": history-search-forward をC-pとかに割り当てたい cat .zsh-history |xargs ssh remote cat >> .zsh-history $ このス^I このスレって、もう死に体だね! $ このスレって、もう死に体だね!_ パラメータに入れた文字列を、パス展開させたいんだけど、 どうしたらようござんしょう? 例えば、 files="hoge*" && パス展開 && [ ${#files[*]} -ne 0 ] とか、したいわけよ。 とりあえず、パス名展開はでけたが、配列になってない…(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 むきーっ もれはアホだー!! > files=(hoge*) && echo ${#files[*]} 3 どうせならmigemo呼び出して日本語ファイル名補完とかして欲すぃ。 誰か実装してたりしませんか。 >>56 PS1= の内容については、マルチバイト文字が認識されてないっぽい。 menu-completeは引数を受け取れるとmanに書いてあるけど、 こういう引数付きコマンドを.inputrcで何らのキーに割り当てるにはどうするの? 色々やってみたんだが…。 kshとbashどちらを先に覚えた方がいいですか? cygwinのbashには/etc/bash_completionが入ってないなー。 bashにはtcshのコンプリート機能はないにょ? bash には bash のコンプリート機能があるにょ。 ∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ 今日はすごい裏技を紹介します。 題して、 「 1から255までループ 」 まず、 1から255までの連続したファイル名を用意します。 中身は空でかまいません。 そのファイルをどこかのディレクトリに格納します。 そして、そのディレクトリに移動したら for i in *; do echo $i; done これでばっちり1〜255までループできますね! 【応用編】 1万回ループしたいときは、ファイルを 1〜10000まで用意するといいですよ >>96 $ for i in *; do echo $i; done 1 10 100 101 102 103 104 105 106 107 108 109 11 110 111 ... 先生!順番が… >>97 新たな投稿ありがとう。 ミッションスタート!! ファイル名を 000 001 002 ・・・ 254 255 と書き換えましょう 裏技やるのにファイル作るの面倒な人用↓ a=0;while [ $a -le "255" ];do touch $a;let a="${a}+1";done こいつで裏技バッチリ。 応援ありがとう!! だが、それではファイル名が>>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 >>100 a=0;while [ $a -le "255" ];do touch `printf %03d\\n $a` ;let a="${a}+1";done >>101 \\nいらね〜・・・touch ``なしで実験したんだよもん 桁数そろえるには、こんな感じかな。 for i in *;do mv $i `echo $i |sed "s/^\([0-9]\)$/00\1/;s/^\([0-9][0-9]\)$/0\1/"`;done GNU coreutils の seq でいいよ... >>104 for i in `seq -w 255`; do touch $i; done と、こうくるわけですか。さすが グニュー使いは裏技使い! もちろん動作も最も速くて完璧超人ですか・・・ でももしこれが 255000 だったりしたらたいへんです なかなか始まりません。 これが今日の裏技。 seq -w 255000 | while read i;do echo $i;done だと、ちっとまし? >>105 のまえにラインバッファの限界こないか? xargsとかつかいな >>104 > GNU coreutils の seq でいいよ... zsh だとビルトインですが何か? >>107 それは大丈夫だ。 100万個のループでも我慢して待てば動作するぞ! だが 1000000 は 1e+06 と表現されるから注意が必要だ。 キミも渡来! >>108 何でもかんでも built-in にするのキモい。 busybox立場無いなぁ とか思ったりしたけど バッシュレ? built-inだと誇らしげに言ってるあたりがイタイね void main (){} をa.outとコンパイルして a.out && echo "sage" とするとsageと表示されるのですがそんなものなのですか? 返り値を返してはいないのですが。。。 不定の結果なのでしょうか? >>114 ./a.out; echo $? だとどう? >>110 > 何でもかんでも built-in にするのキモい。 >>113 > built-inだと誇らしげに言ってるあたりがイタイね そうかな。coreutils, bash を両方インストールするのが無駄 >>116 coreutils = fileutils + textutils + sh-utils どのみち使う。無駄なわけない zsh はいつか perl も built-in にしそうだな。 >>117 > coreutils = fileutils + textutils + sh-utils > どのみち使う。無駄なわけない Linux ゆーざだけでは? ああ、>>117 の 3 つがまとまった coreutils は GNU の産物だからね。 Linux 使いは coreutils パッケージとしてまとめてインストールしておいたほうが 本気で細々したプログラム群を個別にインストールしなくていいので楽。 coreutils が要らないって人は別のパッケージングや管理方法を使ってるんでしょう。たぶん。 >>121 > Linux 使いは coreutils パッケージとしてまとめてインストールしておいたほうが > 本気で細々したプログラム群を個別にインストールしなくていいので楽。 板違い。 > coreutils が要らないって人は別のパッケージングや管理方法を使ってるんでしょう。たぶん。 OS 附属のものを使ってます。 >>112 あれは限定された環境で使うためのものじゃん。 補完の話じゃなくて申し訳ないが質問。 十年以上 tcsh使ってて、 たまーに Linuxとか cygwin入ってる Windowsとかで bashを使うことが あって、そのたびに面倒だなーと思ってるんだけど bash で tcsh の implicitcd に相当することをするにはどうするの? (ディレクトリ名タイプだけで cdする機能) alias ..='cd ..' alias ...='cd ../..' alias ....='cd ../../..' alias .....='cd ../../../..' ... bashが当たり前に動いてるUNIXってあるんですか? >>126 ずいぶん前から Solaris にも入ってるよ。 solarisですか!勉強になりました。調べてみます。 補完の質問ではないのですが、他にbashのスレが無いようなので ここに書かせていただきます。 ls -l | grep '^d' のようなパイプラインの実現方法なのですが、 @foo.shのようなファイルに記述してそこにパスを通す A.bashrcで関数function foo{...}と定義する 上記の@とAのどちらが適切なのでしょうか。 ・シェル関数はカレントシェルのプロセス内で実行される ・シェルスクリプトはサブシェル内で実行される ls -a | grep なんとか というコマンド列はどっちでも変わらない。 >>131 どちらがといわれても、どっちも空白にしか見えない。 今日はbashのif文で質問だ! if文は便利だが、AND条件でちょっと困ったことがある if [ "$HOGE"="hoge" and "$PIYO"="piyo" ]; then 〜 みたいなことをやりたいときは どうするのが賢いかな? if文if文、またif文!? if [ list1 -a list2 ]; then 〜 >>134 if [ "$HOGE" = hoge ] && [ "$PIYO" = piyo ]; then 補完関係ないし。 >>138 今知った! 賢くなった! >>137 ありがとう! 紳士よ! >>134 help test or man test if文で文字列の辞書比較 はどうやら出来そうも無い if文で文字列の辞書比較 はどうやら出来そうも無い 別の方法で実現することに if文で文字列の辞書比較 はどうやら出来そうも無い 別の方法で実現することに したいと僕のアナルが報告 if文で文字列の辞書比較 はどうやら出来そうも無い 別の方法で実現することに したいと僕のアナルが報告 するためにローションを if文で文字列の辞書比較 はどうやら出来そうも無い 別の方法で実現することに したいと僕のアナルが報告 するためにローションを ぬ<tab> ぬか ぬっころす ぬりたくり ぬるぽ if文で文字列の辞書比較 はどうやら出来そうも無い 別の方法で実現することに したいと僕のアナルが報告 するためにローションを ぬ uniqするにはsortしなければならないけど sortしてuniqしたあと、sort前に戻したい というか、sortなしでuniqしたい どうしたらいいかな? 自分で書いたらかっこよくなかった スタイリッシュな方法キボン 番号つけてsortしてuniqして番号順にsortして番号消すってのが、 かっこよくない方法か?>>148 >>150 番号つけてソートしたら番号順にソートされて つまりそれってソートされないんじゃ? >>152 番号以外の部分でソートするってことです。 丁寧にソートするですね そーっと ウェーハッハッハ ソートしてみた。 視覚化になんとJavaVMを使用しています。 * #!/usr/local/bin/bash * declare -a array[15]; * while :; do * array=(`cat /dev/urandom|od -tu1 \ * | sed -e 's/^..........//g'| head -n 1`); * for ((I = 0;I < 16; I++)); do * echo -n " ${array[${I}]}"; * done * echo -e ""; * for ((I = 0;I < 15; I++)); do * for ((J = 15; J > ${I}; J--)); do * if [ ${array[J - 1]} -gt ${array[J]} ]; then * tmp=${array[J - 1]}; * array[J - 1]=${array[J]}; * array[J]=${tmp}; * fi * for ((K = 0;K < 16; K++)); do * echo -n " ${array[${K}]}"; * done * if [ ${I} -lt 14 ]; then * echo -n $'\r'; * fi * java -version > /dev/null 2>&1; * done * done * echo -e '\n' '\n'; * done バージョン 2.05bで、 コマンド ./bin/mycommand を補間しようとして、 ./b のあとに補完すると、 ./bin を補完してくれるのですが、 「n」のあとに余分なスペースを一つ入れられてしまいます。 期待しているのは ./bin/ と(スペースなしで)補完してくれることなんですが、 どう設定すればいいかご存知の方、 教えて下さい。 >>158 そういう設定にしちゃってるんじゃない? 新しいアカウントでもそうなる? setやcompleteの出力を確認してみてみ。 >>160 設定の問題ではなさそうで、 2.05aでは問題なしだった。 うちじゃ 2.05b でも、たとえば ls ./b <tab> で ls ./bin/ になるよ。 コマンドに対して complete でなんか設定しているんじゃないの? >>162 コマンドの引数じゃなくてコマンドそのものの補完の時。 というか公式パッチ確かめたら、出てました。 bash205b-003でした。 bash 3は{1..10}を展開するようになったんだね。 **/Makefileも展開して欲しいなあ。 >>164 でも{01..10}は展開してくれないんだ… よって価値無し(wgetでアレなことするには)。 $ for i in `seq -w 1 10`;do wget http://www.example.com/fuck/porn/teen$i.wmv ;done seqがないシステムだとどうやって苧としてるの?>all >>167 curlだとそんな芸当ができたのかorz >>166 まず、 1から255までの連続したファイル名を用意し コマンドの実行結果って何で見れるんだっけ? exit(x); とかのxの値のことね $!だと思ったけどなんか違った for ((i=0; i<20; i=i+1));do wget http://www.hoge.com/ `printf "%02d"`.jpg $i; done あう... for ((i=0; i<20; i=i+1)); do wget http://www.hoge.com/ `printf "%02d\n" $i`.jpg; done >>174 curl 'http://www.example.com/ [00-19].jpg' -o '#1.jpg' perlは反則? $ perl -e "('001'..'100'){s#(.*)#`wget http://www.hoge.com/$1.jpg `#e}" for i in * do done ではエラーになってしまいます。 bashで空文はどうすればいいのでしょうか? >>181 for i in * do : done bash-2.05b$ たまには たまには補完スレらしく補完してみたり。 たまには糞スレを荒らしてみたり。 bash-2.05b$ たまには $( < /etc/passwd ) と $( cat /etc/passwd ) は同じ事ですか? アドバイスお願いします。 >>184 違う catという名前のrootにsetuidされたrmコマンドがパスの通ったところの最初にあったら怖いだろ >>185 レスありがとうございます。 具体的には$( < /etc/passwd )の方が安全と言うことなのでしょうか? いまいちつかめないのですが・・・ ところで小数の計算ってどうやるの? for(i=0.0;i<10.0;i=i+0.1){}みたいにしたいのに、やり方がさっぱりわからん。 どなたかやり方教えてください。 >>190 あなたの想定している「ファイルを読み込む」を説明してください. >>188 整数部分と小数部分でダブルループにする レスしてくれた人、ありがとうございます。 参考にさせていただきます。 >>192 >>192 神様へ。 レスありがとうございます。 何がやりたいかというとですねぇ・・・ Cシェルで、ある実行ファイルを実行したいときに、それに渡すためのパラメタを、 ファイルから読み込みたいということなんです。 イメージとして、 // イメージここから #!/bin/csh read init.ini // iniファイルを読み込む Hoge $aaa // 実行ファイルHogeに対して、読み込んだinit.iniに記述している項目を$aaaに設定し、 // パラメタとして指定するということです。 // イメージここまで >>196 Hoge `cat init.ini` aliasで外部アプリ起動時に引数を渡すには スクリプトを書く以外に方法はありませんか? alias hage='/d/program\ files/hage/hage.exe $* &' みたいなaliasを登録したいんですけど。 i-searchで履歴を検索する時に大文字小文字を区別できませんか? TABでmenu-completeに設定してるんですけど *abc*<TAB> 等と入力するのが面倒なので TABで先頭一致補完、Ctrl+TABでインクリメンタル補完にしたいんですけど ワイルドカードを使わずにインクリメンタル補完する方法ってありますか? うぁ読み難いですね。 質問したいことは二つあります。 1.i-searchで履歴を検索する時に大文字小文字を区別できませんか? 2.TABでmenu-completeに設定してるんですけど *abc*<TAB> 等と入力するのが面倒なので TABで先頭一致補完、Ctrl+TABでインクリメンタル補完にしたいんですけど ワイルドカードを使わずにインクリメンタル補完する方法ってありますか? よろしくお願いします。 度々すいません。訂正です。 うぁ読み難いですね。 質問したいことは二つあります。 1.i-searchで履歴を検索する時に大文字小文字を区別できませんか? ↓ 1.i-searchで履歴を検索する時に大文字小文字を区別しないようにできませんか? タブを押したとき、直前の単語に * が含まれていればマッチするもの全てに展開、 含まれていなければ候補を1つずつ回って行くという挙動にできますか? ### で始まる文字列が来るまで テキストを表示する というスクリプトを書きたいんだけど 最も短く記述するには なにがいいかな >>205 bashとの関係は・・・ 漏れならこんなの書きそうだが gawk '/^###/{exit} {print $0}' ファイル名 sed -n -e '/^###/q' -e p の方が短い i-searchで履歴を検索する時に大文字小文字を区別しないようにできませんか? ヒアドキュメント内で痴漢したいんですけど、どうしたらいいですか? こんな感じで使いたいですが name="usagi" cat > tmp.txt <<'SAILORMOON' tsukino $name SAILORMOON >>209 パラメータ展開したいんなら、 終了文字列をクォートしちゃいかん。 name="usagi" cat > tmp.txt << SAILORMOON tsukino $name SAILORMOON あと、bash補完の話題じゃないので、シェルスクリプトスレに書いてくれ。 >>210 それだと tsukino usagi にならず tsukino $name のままなんですよ あと、続きはシェルスクリプトスレを探してみます >>211 んなこたぁない。 cat > tmp.txt << 'SAILORMOON' を、↓ cat > tmp.txt << SAILORMOON にしてもう一回やってみろ。 (どこが違ってるかわかってる?) ちゃんと、 tsukino usagi と表示されるよ。 Windowsのコマンドプロンプトのように ファイル名やパス名を補完した結果の文字列を ダブルクォートで囲むようにしたいのですが、 どうしたらよいでしょうか? cd My<tab> ↓ cd "My Documents" completeコマンドでprefix,suffixにダブルクォートを指定しても うまくいきません・・・ >>214 cd "My<tab> じゃあダメかね? >>214 cd My¥ Documents となると思ふけど,それぢゃ具合悪くって? レスどうもー。 >>215 できればbashでやりたいな、と。 >>216 その"を打つのが面倒なので補完したいのです・・・。 >>217 具合悪いです・・・。 cygwinからwinアプリを起動する時の引数として それだとうまくいかないんですよねぇ。 function qwinpath { cygpath -mal "$@" | while read; do f=${REPLY//\//\\}; echo \"$f\"; done } function amp { winamp $(qwinpath "$@" ) & } cygwinスレでwinampにスペースを含むパスを送りたいから助けてくれと書き込んだ時に教えてもらった。 >cygwinからwinアプリを起動する時の引数 を用意してくれる。 >>220 ありがとうございます。 しかし、思ったような動作はしませんでした。 うまい方法はないようですね。 bashを直接いじることにします。 A.txt というファイルに、 AAA='/home/user/sample.conf' と書かれている行があって、これの引数部分を変数に代入するのに PARA=`sed -ne "s/^AAA.*'\(.*\)'/\1/p" A.txt` とやると一応、値の後ろに一文字空白がくっついてしまいます。 これを取るにはどうすれば良いのでしょうか。 >>222 PARA=`sed -ne "s/^AAA.*'\(.*\)' */\1/p" A.txt` >>223 bash か sed か、どちらのミスなのか迷ってたのですが、 sedの方でしたか。 上手く行きました!ありがとうございます。 sedでカンマの前に値が入ってなかったらnullという文字列を入れる処理を作っているのですが どうもうまくいきません。 実際に打ち込んでるコマンドは sed 's/,[:space:]*,/,null,/g' < a > b aのファイルには a,b,,d,e,f,, ,,,,,,,,,, となっています。 すみませんが誰かご教授お願いします。 すいません 期待してる出力例は 225にあるaのファイルを a,b,null,d,e,f,null,null null,null,null,null,null,null,null,null,null,null,null としてb出力するようになるようにしたいです。 申し訳ありません。 >>225 あまりきれいじゃないが: sed -e 's/.*/,&,/' -e ':1' -e 's/,[[:space:]]*,/,null,/' -e 't 1' -e 's/,\(.*\),/\1/' >>228 様 まだ、駆け出しですが是非参考にさせてもらいます。 本当にありがとうございます。 sage忘れすいません。 $ cd / && pwd / $ cd // && pwd // $ cd /// && pwd / 裏面キター [root@hoge /]$ find ./ -name // [root@hoge /]$ [root@hoge /]$ mkdir / mkdir: ディレクトリ `//' を作成できません: ファイルが存在します [root@hoge /]$ touch // touch: `//' のタイムスタンプを設定中: 許可がありません [root@hoge /]$ cd // [root@hoge //]$ ('A')....w rm ーfr // はこわいからできない。 ごめんうそついた。 ほんとは一般ユーザでやった ノシ >>231 みたいに一貫性がないのは、実害はないけどバグでしょ。 仕様という名のバグだろ。 Q.□ボタンが凹むのですが A.仕様です アホか >>238 >>237 のリンク先読んだ? 意図てきにそうしてあるよ。 > This is, I presume, for historical compatibility. Certain versions of > Unix, and early network file systems, used paths of the form > //hostname/path to access `path' on server `hostname'. み、見たことねぇ……(;´Д`) bashdbって使ったことありますか? 簡単なステップ実行できますね。 >>242 こんな感じ。 Administrator[ 2:22PM]% bashdb a.sh M-SAKAI1:~ Bash Debugger version 1.2.4 Reading source from file: a.sh Stopped at line 3 a.sh:3 >ls bashdb> ? bashdb commands: break N set breakpoint at line N break list breakpoints & break condition condition foo set break condition to foo condition clear break condition delete N clear breakpoint at line N delete clear all breakpoints display EXP evaluate and display EXP for each debug step display show a list of display expressions undisplay N remove display expression N list N M display all lines of script between N and M list N display 5 lines of script either side of line N list display 5 lines if script either side of current line continue continue execution upto next breakpoint next [N] execute [N] statements (default 1) print expr prints the value of an expression trace toggle execution trace on/off ftrace [-u] func make the debugger step into function FUNC (-u turns off tracing FUNC) help print this menu ! string passes string to a shell quit quit >>244 ソースの./bash-3.0/examples/bashdb/bashdbに入ってるよ。 引数にシェルスクリプトを指定すればすぐ使えます。 -aalias -bbuiltin -ccommand -ddirectory -eexport -ffile -ggroup -jjob -kkeyword -sservice -uuser -vvariable bashのコマンドラインからコマンド打つときの 引数の長さや数の上限は、環境変数で変更できるの? bashの保管ってコンテキストで変えられるの? たとえば man TAB だとmanのあるやつがリストアップとか bashでファイルをインクルードする方法ってないでしょうか? Aというファイルに関数abcというのがあり、 BというスクリプトからAの中にある関数abcを呼び出したいんですが 検索しても見つからなかったのでご教授お願いします。 初心者です。251がどこを検索したのか知りたいんですが教えて下さい。 タブ補完でディレクトリを手繰るとき、ディレクトリがシンボリックリンクだと 2回タブキーを押さないといけないのがうざったいですが、なんとかなりませんか? bash2.05です。昔は、普通のディレクトリでもディレクトリへのシンボリックリンクでも タブ1回で済んでいたような気がします。 >>256 echo set mark-symlinked-directories on >> ~/.inputrc whichコマンドでjavacを指定すると /usr/fuga/bin/javac となるんですが、 これを /usr/java/j2sdk1.4.2_05/bin/javac に変更したいのですが、どうすればよいでしょうか? .bash_profileの中身には PATH=$PATH:$HOME/bin export PATH=$PATH:$JAVA_HOME/bin ($HOMEはfuga) となっていますが、これは変えたくないのですが・・・ ご教授お願いします。 >>258 alias javac=/usr/java/j2sdk1.4.2_05/bin/javac bash なら which より type 使え。 bash の Trap 設定ってデフォルトで以下が入ってしまうのは? -------------------------- bash$ trap trap -- '' SIGINT trap -- '2' SIGQUIT bash$ -------------------------- 何かの罠? Solaris8 (SPARC)です。 -------------------------- $ pkginfo -l SMCbash PKGINST: SMCbash NAME: bash CATEGORY: application ARCH: sparc VERSION: 3.0 BASEDIR: /usr/local VENDOR: FSF PSTAMP: Steve Christensen INSTDATE: x月 xx 2005 hh:mm EMAIL: steve@smc.vnet.net STATUS: 完全にインストールされました。 FILES: 261 installed pathnames 5 shared pathnames 22 directories 21 executables 16794 blocks used (approx) $ -------------------------- 起動したら最後PID見てkillするしか止める方法が無いプログラムの start、stopをbashで書こうと思っているのですが(XXXXctlみたいな奴です) PIDを取得するのに良い方法はあるんでしょうか? 今は$(ps -ef | grep プログラム名 | cut -c 9-14 | sed -e "s/\s//g")とかやって 配列に突っ込んでるんですが、、、 そもそもpsの出力って固定長でしたっけ? ちなみにOSはRHES3です >>263 お前それ板違いだろ。コママンドライン補完でもないし… /FYI/ pgrepが入っているはずだよ。 ~/.inputrc に "\M-p": history-search-backward "\M-n": history-search-forward と書いてあるんだが、3.1 にしたら効かなくなったみたい。 "\ep": history-search-backward "\en": history-search-forward なら $ man find -print0 man にイタズラできるズラ zsh が流行りだけど漏れは bash も軽くて好きだ。補完は… shopt -s hostcomplete complete -d cd pushd rmdir complete -c type which man これくらいしかやってない('A') しかしデフォルトでドットファイルが補完対象になるのはちょっとウザいな。 これを止めさせる方法誰か知らないかい? ぐわ、自己解決だスマソ ~/.inputrc に set match-hidden-files off を加えればいいようだ。 Tab補完候補をカラー表示したくてzsh使ってるが ホントにbashの方が軽いんだろうか? zshスレで出てきたやつをパクッて改造しただけなんだが function cd { if builtin pushd ${1:-$HOME} > /dev/null ; then if [ $(/bin/ls $argv |wc -l) -le 50 ] ; then >---/bin/ls -F else >---echo "many files exists" fi fi } function pd { builtin pushd +1 > /dev/null pwd /bin/ls -F } function nd { builtin pushd -0 > /dev/null pwd /bin/ls -F } ずんwikiにいろいろ書いといた。 変だったら直しておいて。 bashって、zshみたいに、 **/Imakefileって、`find . -name Imakefile`に相当すること出来ないの? >>263 ps -C プログラム名 -o pid= cd の補完候補に$CDPATHを含めたかったので bash_completionから↓この辺だけ.bashrcにコピペしたのですが complete_cdpath() { ... } complete -F complete_cdpath cd _cd() {... } if shopt -q cdable_vars; then complete -v -F _cd $nospace $filenames cd else complete -F _cd $nospace $filenames cd fi こんなエラーが出てしまいます。 bash: ./.bashrc: line 171: syntax error in conditional expression: unexpected token `(' bash: ./.bashrc: line 171: syntax error near `?(\' bash: ./.bashrc: line 171: ` if [[ "$cur" == ?(\\)\$* ]]; then' . bash_completion するとエラーはでないのですが、 どう直せばいいんでしょうか? インクリメンタルサーチを使いたいのですが Ctrl+Rで前に戻れるけど、これだけでは意味がわからないです。 Ctrl+Sを押すと停止してしまってCtrl+Qを押すまで復帰しません。 使い物にならないのですがどうにかならないでしょうか >>276 Ctrl-S/Ctrl-Qは、シリアル通信用のXON/XOFFとして使われてるので、 Ctrl-Sで停止したりするのは端末の仕様。 これをやめさせるには、 $ stty -ixon を実行しておく。 /usr/local/bin/hoge-abc-xyz なんつう実行ファイルがあったとして、 これ、bc って打ってタブ打ったら 候補としてあがってくるようにとかできないもんかな。 コマンドの途中しか覚えてないことがあるんだけど、 そういう時ってどうやってる? 俺は結局 locate で調べてます。 >>281 欲嫁 > コマンドの途中しか覚えてない って言ってるんだからその答えは外してる。 >>280 答えは、 echo /usr/local/bin/*bc* /usr/local/bin/ にあるってことすら忘れてるんじゃないの tcshのpostcmdというのと同じことをbashでやりたいんですが, 何か良いやり方はありませんか? いや,それはtcshでいうところの precmdであって, postcmdはコマンドを実行する直前に動作するものなので それだと目的が実現できないんですよ bashでTabをうつとファイル名が補完されますが 補完対象から「.」で始まるファイルを外すことはできますか。 いつも「.svn」が補完対象に入ってうざいんです。 >>287 echo 'set match-hidden-files Off' >>~/.inputrc Objective-BashとかBash++とか、そういうの誰か作ってください。 AAA_1996.txt AAA_1997.txt AAA_1998.txt AAA_1999.txt AAA_2000.txt AAA_2001.txt AAA_2002.txt AAA_2003.txt AAA_2004.txt というファイルがあるときに、AAA_1999.txtからAAA_2002.txtまでをあるコマンドの引数に 与えたいと思うのですが、 command AAA_{1999|2000|2001|2002}.txt とやってもだめでした。こういう場合はどう書けばよいでしょうか? >>291 AAA_{1999..2002}.txt ありがとうございます。 先のコマンドというのはunzipなんですが、lsとかだと教えてもらった書き方でいけたのですが、 unzipだと上手くいきません。ワイルドカード的な書き方に拘らず、全部書いてしまってもいいかとも 思うのですが、、、もし書き方があったら教えてください。 $ unzip AAA_{1999..2002}.zip Archive: AAA_1999.zip caution: filename not matched: AAA_2000.zip caution: filename not matched: AAA_2001.zip caution: filename not matched: AAA_2002.zip 結局何も解凍されず。 $ ls AAA_{1999..2002}.zip AAA_1999.zip AAA_2000.zip AAA_2001.zip AAA_2002.zip ちゃんと表示された。 >>293 それは、unzipの仕様で、複数のファイルを列挙では指定できないため。 for文使うしかないな。 for f in AAA_{1999..2002}.zip; do unzip $f; done >>294 すげぇ、、、、 あんたゴルゴみたいだな。 このスレの存在意義を否定するわけじゃないが あんまりbashの補完にねちねち拘るくらいなら、zsh使ったほうがいいよ >>297 的確に的を射た解答をしてくれるって意味じゃないの /tmp/hoge が昨日作られたものかどうかチェックしたいんだけど どう書けばいい? bash-4.2で、変数DIRに適当なディレクトリが入ってる時に $DIR[Tab] で補完しようとすると、 ¥$DIR/hoge みたいに補完されてしまい、 変数$DIRがわざわざクォートされてしまって展開されません。 bash-4.1ではちゃんと$DIRが中身に展開されて補完されました。 展開させるには? >>302 CTRL+ALT+e で展開出来るんじゃない? >>302 $ bind -p | grep shell-expand-line >>312 質問と回答が噛み合ってないなぁ /dir/hoge/boke っていうディレクトリがあったとして、 DIR=/dir/hoge と代入されてる状態で、 bash-4.1 では、$DIR/b[TAB] で補完できたのに bash-4.2 では $DIRがクォートされる(なのにbokeの部分は補完される) という中途半端な状態になるのを直したいってことだろ。 $ bind -p | egrep complete-filename bashline.cを読めば分かるが、completeのその振る舞いは外から制御不可能。 bash-4.2では出来ないんですね。 わかりました。bash-4.1に戻します。 bashスクリプト内で source .bashrc が反映されません どのようにすればスクリプト内で反映されるのでしょうか? >>318 スクリプト内で sourceしても、スクリプトを抜けたら元に戻るよw >>319 戻らないようにするにはどうすればいいのん? 子プロセスに環境変数を設定させる方法って無いかな。 Cのポインタ渡しみたいに。 投入コマンドのみフォントカラーを設定したいんだけど、できる? [maro@2ch.net log]$ls otakara.zip ero.zip [maro@2ch.net log]$unzip ero.zip ↑の "ls", "unzip ero.zip" に色をつける感じで。 補完のエスケープシーケンスを Ctrl-I にして、 TABキーはそのままTABが入力できるようにしたいんですけど、 設定方法よろしこ。 タブ文字を入力したい時はC-v C-iかC-v TAB >>326 それは知ってます(笑) それでは嫌なので、TABだけでTAB入力、 Ctrl-I のエスケープシーケンスで補完にしたいんですが。 わかる人だけお願いします わからない人は黙っていなさい >>327 bash側の設定では無理だと思うよ。 X側の設定でTABが送るキーコードを変えるとか そういう無茶をしないと無理だと思う。 >>329 逆じゃね?bash側でなんとかしないと解決しないと思うんだが あるコマンドを、成功するまで指定回数分リトライする というスクリプトを、スタイリッシュに書いてください。 あるコマンドを、成功するまで指定回数分リトライする という補完設定を、bashでスタイリッシュに書いてください。 わかる人だけお願いします わからない人は黙っていなさい >>337 スタイリッシュさが伝わらない。 あなたは失格ですね。 カーソルの↑とかでヒストリーを出して編集すると、 ヒストリーが編集されてしまいますが これをやめたいときはどうしたらよいでしょうか。 >>304 >>306 >>314 bash-4.1では CTRL+ALT+E 押さなくても最初から展開されるんだよ。 bash-4.2でも同じように最初から展開される方法を質問してるんだろ。 質問です bashの補完機能使うとだーって候補が出るじゃないですか その候補から検索でわーって絞り込みたいんです 出来ますの?勿論ググりましたが、当方馬鹿なのでわかりません サルでも分かるような回答を強く期待します 僕はこういう小バカにしたような書き方しか出来ませんが、凄く切実に知りたいです さぁどうぞ↓ bashで、今から実行するコマンドの実行時間を測定するときは 組込みコマンドの time を使用するけど、 今すでに実行中のコマンドの実行時間を測定する方法ってありますか? あとからtimeコマンドを打つわけにもいかないし スレチだがless カーネルモードだったら $ cut -d' ' -f15 </proc/$PID/stat ユーザーモードだったら $ cut -d' ' -f14 </proc/$PID/stat 詳細は知らん。 起動した時刻から調べるなら $ cut -d' ' -f22 </proc/$PID/stat >>348 なるほどありがとう それを1秒おきにPIDがなくなるまで監視すればいいんだな ちょっとやってみる Q. bash は UNIX の勉強に使えますか? A. bash は UNIX に慣れた人間が「bash の 機能!」を気取るには向いていますが、 UNIX の勉強には向いていません。 bashの組込みコマンド一覧をbashで表示するにはどうしたらいいの? helpで表示するとちょん切れてオプションが読めないな だれだこれ設計した阿呆は そういうのは個別に help コマンド名 で確認。 あれは途中でちょん切れてる、ってより 可能な範囲で表示している、って感じ。 bash のパイプ数って変更できないんですかね? ulimit -p で設定しても、”変更させねーよ!”といわれてしまうので・・。 >>360 ulimit -p は パイプ数じゃなくてパイプサイズ(512btye単位)だろ。 OS(カーネル)のパイプサイズが4096byteだから、 これはシェルはもちろん、プロセス側からは変更できない。 dashとbash比較した時 クライアング運用ならdashのが劣っている点はなんですか? ログインした時の場所を任意に決めたいんですが、 そんなことって出来るんですか? 出来るなら方法を教えて欲しいです。 お願いします。 それだとcdコマンドを発行すると元に戻ってしまいます。 その時の場所も任意に変更したいのですが、それは出来ますか? 標準エラー出力と標準出力、それぞれを 別のパイプに通すことは可能? ( ./unko | ./chinko ) 2>&1 | ./manko ってやっただけ。 ( )の存在を忘れてた。 bashをshという名前でコピーして勉強しましょう。多少はshに近づく シンボリックリンクでもモード切り替わるんじゃなかったっけ? ハードリンクでもモード切り替わるんじゃなかったっけ? スタティックリンクでもモード切り替わるんじゃなかったっけ? ダイナミックリンクでもモード切り替わるんじゃなかったっけ? ubuntuではdashにしんぼりっくりんくはってあるね スケートリンクでもモード切り替わるんじゃなかったっけ? case文の途中で抜けたいんだけど breakつかうと上のfor文抜けちゃうので どうしたらいいか よいアイデアを 出すのだ 2つのディレクトリに同じファイルをコピーしたいのですが、一回で処理したいです 調べたところcp, xargs,lsを使うと出来そうなのですが、どうしたらよいでしょうか ls /dir/foo /dir/hoge | xargs cp file ではだめでした 言い忘れましたが、コピーはアトミカルにお願いします。 freeBSDはなんでbashを標準シェルにしちゃったの? ls *.txt みたいな正規表現もどきって 正式名称はなんですか? * や ? はワイルドカードと言うが、 [a-z] みたいなのはワイルドカードとは言わない。 globはどちらかと言うとcsh用語だな。 bashのmanだと、"pathname expansion" として載ってるから、 "パス名展開"が正式かな。 bashでもGLOBIGNORE変数とかあるじゃん ありがとうございました グロブやパス名展開でいろいろググることができました 検索したいときに検索すべきキーワードわからないと ほんとに検索できなくてつらかったので助かりました コマンドで -h なんかを使ってusage出しているときは 戻り値は 0 にすべき? ctrl+u でカーソルより前を削除 ctrl+k でカーソルから後ろを削除 カーソル位置関係なく行を丸ごと削除するショートカットはないの? C-cじゃだめかな だめなら ~/.inputrc に Control-k: kill-whole-line$ とか書く >>417 kill-whole-line すばらしい bindしてみる historyが端末を開いているときはどんどん増えていくのですが 再起動すると新しい500個位になってしまいます HISTSIZE=10000にしているので10000個保存してほしいのですが何がおかしいのでしょう? ~/.bashrcのhistory関連の設定はこんな感じです export HISTCONTROL=ignoreboth export HISTIGNORE="fg*:bg*:history*" shopt -s histappend export PROMPT_COMMAND="history -a" export HISTSIZE=10000 export HISTFILESIZE=200000 export HISTTIMEFORMAT='%F %T ' 誰でも簡単にパソコン1台で稼げる方法など 参考までに、 ⇒ 『宮本のゴウリエセレレ』 というブログで見ることができるらしいです。 グーグル検索⇒『宮本のゴウリエセレレ』 VGOGKSEEQX 知り合いから教えてもらったパソコン一台でお金持ちになれるやり方 時間がある方はみてもいいかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 3VNZ7 read.cgi ver 08.0u [upliftProject] - 2023/07/09 Walang Kapalit ★ | uplift ★ 5ちゃんねる