- 1 名前:名無しさん@お腹いっぱい。 [2009/07/01(水) 09:42:48 ]
- シェルスクリプトの総合スレです。
スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 FreeBSDユーザは/bin/shの正体がashなので注意。 v7 shに一番近くて、現役のshは、OpenSolaris由来のheirloom sh。 src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/sh/ heirloom.sourceforge.net/sh.html ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その14 pc12.2ch.net/test/read.cgi/unix/1233179688/
- 85 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/16(木) 00:53:20 ]
- #!/bin/rc もベル研純正シェル
- 86 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:39:49 ]
- >>34
awkはシェルにあらず。 シェルスレならシェルで解決。 #!/bin/bash n=$((-$1)) shift for file in "$@"; { i=1 while IFS= read -r line do ((i++ == n)) && { echo "$line" break } done < "$file" }
- 87 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 21:52:56 ]
- bash使うなよ
- 88 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:25:33 ]
- bashはLinux板でやれ
- 89 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/17(金) 22:39:05 ]
- >>87-88
bashに過剰反応するな。 kshでもzshでも動くから、bash依存とまでは言えない。 #!/bin/ksh n=$((- $1)) shift for file in "$@"; { i=1 while IFS= read -r line do ((i++ == n)) && { echo "$line" break } done < "$file" }
- 90 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 00:36:24 ]
- POSIX準拠だから#!/bin/shでもいいはず、といってみる
- 91 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/18(土) 01:40:37 ]
- /bin/shにはPOSIX shellを置く、なんてことはPOSIXに書いてない
- 92 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 13:50:12 ]
- シェルスクリプトでドラッグアンドドロップできる?
- 93 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:12:21 ]
- >>92
目的は何?
- 94 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:32:02 ]
- >>93
目的がわかっても答えられないのに逆質すんな。
- 95 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/21(火) 14:38:10 ]
- あぁ、釣りか。
つられちゃったw てへっ?☆
- 96 名前:92 mailto:sage [2009/07/21(火) 15:19:06 ]
- ちょっと思いついたので聞いてみただけです。目的はありません。
- 97 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:01:27 ]
- シェルスクリプトで手マンできますか?
- 98 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 01:03:03 ]
- >>97
目的は何?
- 99 名前:sage [2009/07/22(水) 15:28:06 ]
- 質問させてください。
標準入力から入力した値を処理するシェルスクリプト(Bシェル)を作成しています。 入力値に\(バックスラッシュ)が入る可能性があるので、 readのオプションに「-r」を付けて、入力値をすべて受け取れるようにしようと思ったのですが、 「-r」オプションをつけると「英数字以外の文字が使用されています。」というメッセージが出力され オプションが使えないようです。 例) OS:Solaris10 $ cat aaa.sh #!/bin/sh read aaa echo $aaa read -r ppp echo $ppp $ $ ./aaa.sh III ←コマンドラインから入力 III ←出力 ./aaa.sh: -r: 英数字以外の文字が使用されています。 ←オプションを付けたreadに対してのエラーメッセージ 質問ですが、Bシェルでは、readに「-r」オプションは使えないのでしょうか? (manを見る限り使えないとは言ってないように思われたのですが) もし、使えないとすると、何か他に方法をご教授頂けないでしょうか? (出来る限りBシェルでしたいと考えているのでこのコマンドだけkshで実行するなどでしょうか) よろしくお願いします。
- 100 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 15:45:09 ]
- どうみても使えるとは書いていませんが、何を見ているのでしょうか?
docs.sun.com/app/docs/doc/816-5165/sh-1?l=Ja&a=view
- 101 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:14:27 ]
- >>99
Solarisの/bin/shのreadは、-rには対応していません。 bashか、zshか、kshを使いましょう。
- 102 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:18:57 ]
- >>99
どうしても /bin/sh だけでやりたい場合、 read -r aaa の代わりに、 aaa=`head -1` とやる方法がある。
- 103 名前:sage [2009/07/22(水) 16:32:21 ]
- ありがとうございます。
>>100 -r 使えないんですね。 docs.sun.com/app/docs/doc/819-1210/read-1?a=view を見て、標準のオプションなのかなと思い込んでました。 >>101 やっぱり他のシェルにするべきなのか 検討します。 >>102 その様な方法もあるんですね。勉強になります。 今回使用できるのか検討します。
- 104 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:32:27 ]
- なるほどねえ
- 105 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:34:43 ]
- >>103
> docs.sun.com/app/docs/doc/819-1210/read-1?a=view sh のとこに -r 書いてないじゃん。
- 106 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:39:22 ]
- docs.sun.com に書いてあるのは、外部コマンド版の /usr/bin/readじゃん。
中身はkshスクリプト。 これって、結局シェル変数が親プロセスに渡らないから意味ないし、 外部コマンド版の /usr/bin/cd と並んで意味不明コマンドのひとつなんだよな。
- 107 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:40:44 ]
- >>106
いや、/usr/bin/read 以外にシェルの内部コマンドについても書いてあるよ。
- 108 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:44:04 ]
- >>107
そんなことは知ってるよ。 そうじゃなくて、/usr/bin/readのアフォさ加減について話題を振りたいわけだが。
- 109 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:46:03 ]
- >>106の書き方じゃ知ってたかどうかわからんよ。
- 110 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 16:50:18 ]
- 質問者の >>99 が、shの内部コマンドのreadは使えなくても、
shから/usr/bin/readを呼び出せば使える、と勘違いしていた可能性もあるわな。
- 111 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:04:48 ]
- >>108
POSIX標準では、 ・$0 "$@"で実装できるからシステムの負担にはならない ・いい使い方があるかも知れない ・対称性のため などと存在理由を説明しています。
- 112 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:26:25 ]
- >>111
>・対称性のため なら、なぜ、eval exit export wait などについては 外部コマンド版がないのか合理的な説明をお願いします。
- 113 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:35:26 ]
- POSIX仕様には書いてありません。
- 114 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:41:28 ]
- POSIX標準がそう決めた理由を聞いているのに、
「POSIX仕様には書いてありません」は循環論法。
- 115 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:53:32 ]
- >>111に理由聞いてもしょうがないんじゃね。
- 116 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:56:28 ]
- 使えない外部コマンドがあるくせに、
Solarisでは /usr/bin/[ が削除されてるんだよなぁ。 ほんとわけわからん。
- 117 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:57:33 ]
- >>116
使いたいの?
- 118 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 17:59:48 ]
- v7shをもってきて使いたくなるかもしれないじゃないか
- 119 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 18:16:31 ]
- >>117
使いたいかどうかじゃなくて、 /usr/bin/[ は、呼び出せば動作する。 一方、/usr/bin/read とか、/usr/bin/umask とかは readや umaskの動作はしない。 動作するものを削除して、動作しないものを配置することの馬鹿さを言ってるんだが。
- 120 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 18:56:40 ]
- あってもなくても害がないならどっちでもいいじゃん。
馬鹿と非難するほどのことでもないと思うけど。
- 121 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 19:39:41 ]
- これ、正しいか?
docs.sun.com/app/docs/doc/819-1210/read-1?a=view > 例 1 read コマンドの例 > > 以下に示す /usr/bin/read の例は、入力ファイルの内容を、各行の先頭フィールドを最後尾に 移動して出力するものです。 > example% while read -r xx yy > do > printf "%s %s\n" "$yy" "$xx" > done < input_file
- 122 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/22(水) 20:12:29 ]
- マニュアルのバグだね。send-prしといてね。
- 123 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 03:48:55 ]
- AIX5.2,5.3で2Gを超えるディレクトリをtarで固めるにはどうすればいいのでしょうか?
- 124 名前:名無しさん@お腹いっぱい。 mailto:SAGE [2009/07/23(木) 15:41:48 ]
- man tarとすると、ustarヘッダーの書式を使用すると、ファイルサイズを最大8GBにできます。
とあるのですが、具体的にどうすれば2GB以上のファイルをtarで扱えるようになるのでしょうか?
- 125 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:05:40 ]
- まず、適切な質問の方法を学びましょう。
- 126 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:05:54 ]
- これは「シェルスクリプト」なのか ?
まぁとりあえずAIX 5.2では可能らしい ttp://d.hatena.ne.jp/aix_memo/20090202/1233564844 US-TARかどうかは適当に固めたものを用意してcatで確認したらいい ustarの文字が入ってたらUS-TARの形式 ほかに ファイルシステムの問題かも知れない。何使ってる ? /tmpの残り容量の問題かも知れない。十分ある ?
- 127 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:52:21 ]
- >>125
まず、適切な回答の方法を学びましょう。 わからないなら黙っていましょう。
- 128 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 17:58:09 ]
- AIXスレ行け。
- 129 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:06:20 ]
- >>127
クズは黙ってろ。
- 130 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:15:49 ]
- >>123 の質問がとくに不適切とも不備な質問とも思えない。
実際にAIXで2GB超のファイルをtarで固めた経験がある者なら >>123 を見ただけで即答できるはずだ。 質問の仕方に注文を付けたり、さらに「○○の結果は?」とか追加情報を求める回答者は その追加情報があっても答えられないダメ回答者。
- 131 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:17:42 ]
- おかしな煽り野郎が張り付いている模様です。
しばらく放置しましょう。てか、元の質問がシェルスクリプトの質問じゃねぇし。
- 132 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:18:36 ]
- シェルスクリプトスレで質問するのは適切ではない。言い訳してないで。消えろ。
- 133 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:20:43 ]
- その tarを シェルスクリプトの中で使う予定なんですぅ、、
- 134 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:22:24 ]
- 言い訳してないで。消えろ。カス。
- 135 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:27:49 ]
- AIX5.2とAIX5.3です。
以下のようなシェルを発行したところ、 dir以下に2GBを越えるファイルがあるとエラーになります。 どのように修正すればよろしいか? #!/bin/sh tar cvf hoge.tar dir
- 136 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 18:36:21 ]
- 詰まらん。消えろ。クズ。
- 137 名前:名無しさん@お腹いっぱい。 mailto:SAGE [2009/07/23(木) 20:43:57 ]
- >>126
ありがとうございます。 USTARの文字ははいっていました。 TMPには空きがあります。 ファイルシステムについては、よくわかりません。
- 138 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/23(木) 21:51:51 ]
- >>137
2G制限ならulimitを確認。 8G制限はどうにもならないのでGNU tarでも使ったら? で「シェルスクリプトで必要だから」という理由で環境依存の 質問をシェルスクリプト一般のスレでやっても煙たがられるだけ というありがたい指摘を、そろそろ受けいれたらどうかな?
- 139 名前:名無しさん@お腹いっぱい。 mailto:SAGE [2009/07/23(木) 23:39:41 ]
- >>138
ありがとうございます。 今帰りなので、週末に調べてみます。
- 140 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/26(日) 07:59:26 ]
- ulimitはunlimitedでした。引続きお願いします。
- 141 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/29(水) 12:57:14 ]
- スレ違いだと何度いったらわかるんだ。池沼。消えろ。
- 142 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/31(金) 20:12:20 ]
- すみません、お力を貸してください。
aaa.txtの中身が、 aa\n bb\n cc\n として、これをシェルスクリプトで unko=$(cat aaa.txt) echo ${unko} とすると、 aa bb cc と改行がスペースに置換されていますが、これを改行のまま格納することはできないでしょうか。 上記はあまりいい例ではないので「cat aaa.txt」でいいだろ、と思われるかと思いますが。。。 ftp -nvとかの標準出力を一旦変数に入れといて、後から結果解析及び出力したく、しかも、諸事情でtmpファイル(←すみません、ちんぽファイルではなくて一時ファイルです)を作るのはNGなので、なんとか改行をスペースに置換させないで変数に入れて実現したいのです。 どなたか、ご教示お願いいたします。OSは、HP-UX、Bashです。よろしくお願いします。
- 143 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/07/31(金) 20:48:07 ]
- >>142
echo "$unko"
- 144 名前:名無しさん@お腹いっぱい。 [2009/08/01(土) 23:50:17 ]
- シェルを2つ以上コマンドで開くことは出来る?
今はパネルからクリックしてるので大変。 でも、コマンド売っても出てこない>< ちなみに端末エルミネーターはBASH。
- 145 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/01(土) 23:52:35 ]
- はいはい 15点
- 146 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/02(日) 05:00:19 ]
- >>142
配列(パイオツじゃないよ)使うんじゃだめなの?
- 147 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/02(日) 09:40:59 ]
- >>146
>>143
- 148 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/02(日) 13:13:29 ]
- >>142
シェル変数の展開時は、ダブルクォートでくくるのが原則。 それで、改行もスペースもそのまま保存される。 逆に、単純に展開する場合は ${ } でくくる必要はない。
- 149 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 00:52:02 ]
- . や source で起動されても、自分の名前を取れる方法ありますか?
当然$0だとだめなわけですが [root@miu tmp]# cat a.sh #!/bin/sh echo $0 [root@miu tmp]# source a.sh bash [root@miu tmp]#
- 150 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 01:39:05 ]
- . や source は起動されてないし
- 151 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 02:40:17 ]
- そこをなんとか・・
- 152 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 04:37:49 ]
- bash依存
$ echo 'echo $BASH_SOURCE' > /tmp/t.sh $ . /tmp/t.sh /tmp/t.sh
- 153 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 06:26:10 ]
- >>152
bash3以降依存だね。bash2だと動作しない。
- 154 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 07:19:14 ]
- >>149
先頭で自分の名前を変数に代入すれば?
- 155 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 07:24:49 ]
- >>154
全然解決になりません。 同じスクリプトを複数のファイル名でハードリンクしていて、 呼ばれた名前によって動作を切替えたいので。
- 156 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 07:28:15 ]
- もう $BASH_VERSION チェックして $BASH_SOURCE 使えよ。
- 157 名前:名無しさん@お腹いっぱい。 [2009/08/03(月) 08:19:17 ]
- そもそも.でもsourceでも名前わかってなきゃ呼べないよね
呼べるってことは名前わかってるじゃん あほじゃないの? $_とかでもいいんじゃないの?
- 158 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 08:39:57 ]
- >>157
惜しいけど、 hoge=file source $hoge みたいに、変数経由で呼ぶと、 $_ では名前を取得できないから NG。
- 159 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 08:43:04 ]
- >>157
シェル依存。 ashとかでは、sourceファイル内一発目の $_ は、$0 と同じ値になってる。よって不可。
- 160 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 20:41:06 ]
- >>155
>同じスクリプトを複数のファイル名でハードリンクしていて、 >呼ばれた名前によって動作を切替えたいので。 それは(+sourceした時にまで対応したいという)発想に無理があるのでは
- 161 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 20:48:50 ]
- >>160
わからないなら黙ってろ
- 162 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/03(月) 21:10:02 ]
- シェル非依存な方法はないから。
- 163 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 01:00:01 ]
- 関数内のexitをreturnと同じように振舞わせる方法はないでしょうか。
現場で共通利用している共通関数の定義ファイルを . で読込んで使っているのですが、、、 お目当ての共通関数は、関数内でエラーだった場合、ログ吐いてexitまでしてしまい、困りました。 エラーコードで返してくれさえすれば、処理自体はそのまんま使いたいのですが。。。 その共通関数の戻り値はreturnでは返されず、共通関数内で定義した変数に格納され、呼び元でその変数を使う作りになっています。 何卒よろしくお願いします。
- 164 名前:名無しさん@お腹いっぱい。 [2009/08/04(火) 01:02:56 ]
- 質問です。
以下のようなファイルhoge.datがあるとします。 ------------------------ ~$ cat hoge.dat usa\newyork japan\tokyo korea soul ------------------------ このhoge.datを、以下のようなスクリプトで読み込んでから、出力してみたのですが、 円マーク(\)が表示されなくなります。 ------------------------ ~$ cat hoge.sh #!/bin/sh IFS=' ' while read line do echo "$line" done < hoge.dat --------------------------- 実行結果 --------------------------- ~$ ./hoge.sh usanewyork japantokyo korea soul --------------------------- 円マーク(¥)も表示されるようにするにはどうしたらよいでしょうか?
- 165 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 06:39:16 ]
- >>164
read -r あと、円マークじゃなくてバックスラッシュが表示されるように設定しろ
- 166 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 06:44:51 ]
- >>163
alias exit=return . hoge unalias exit
- 167 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 08:37:30 ]
- >>163
result=`. hoge;echo \$result`
- 168 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 08:43:41 ]
- >>167
「.」でソースしてるファイル内で「関数定義」をしているので、 それだとサブシェル扱いになるので、リターンすると関数定義が消えてしまうので 解決になりません。(戻り値が必要なのではありません)
- 169 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 08:58:38 ]
- 条件後出しすんなよ。そういうことなら
(共通関数) 条件後出しのお代りか?
- 170 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 09:06:40 ]
- >>169
後出しじゃないだろ >>163 >共通関数の定義ファイル
- 171 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 09:09:35 ]
- >>166 で解決でしょ。
sourceしたファイル内で returnできるshには、aliasもあるから。
- 172 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 09:21:24 ]
- 見てきたように嘘をつくなあ、純正shはreturnあって、alias無い。
- 173 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 09:27:17 ]
- >>172
> 「sourceしたファイル内で return」 純正shは、関数の中でしかreturnできない。 sourceしたファイル内で returnすると、純正シェルではエラーになる。 嘘はお前。
- 174 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 09:58:18 ]
- 嘘つきはどちらでしょうか?
> お目当ての共通関数は、関数内でエラーだった場合、ログ吐いてexitまでしてしまい、困りました。
- 175 名前:163 mailto:sage [2009/08/04(火) 12:35:58 ]
- みなさんたくさんのレスありがとうございます。
>>166を使って相談してみたところ怪訝な顔をされてしまい、 結局「共通関数のコピペで別の関数(exit→returnだけ)を作れ」 となってしまいました。。。 ※個人的には、その方がよっぽど怪訝な顔したいですが。。。 とても勉強になりました。ありがとうございました!
- 176 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 13:39:20 ]
- >>172
質問者(>>175)が、「>>166(alias)を使って相談してみた」って言ってるから、 やっぱりaliasが使えるシェルだったということで、>>171 が正しかったじゃん。
- 177 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 13:44:25 ]
- たまたま使えただけ。↓は赤っ恥全開の嘘。
> sourceしたファイル内で returnできるshには、aliasもあるから。
- 178 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 13:45:27 ]
- >>177
「sourceしたファイル内で returnできるshには、aliasもある」は正しいが。
- 179 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 13:50:33 ]
- 恥の上塗りミットも茄子。
シェル関数内でのexitを書き換える為には↓これでは十分じゃないから。 > sourceしたファイル内で returnできるshには、aliasもあるから。
- 180 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 13:53:53 ]
- >>179
おまえ、意味取り違えてるよ。 シェル関数じゃなくて、sourceしたファイルを中途終了するときに、 returnが使えるんだよ。(純正シェルだと使えない) (exitを使うとsourceした元のシェル自体が終了するので使えない) そういう新しい機能のreturnが使えるシェルなら、aliasも使える。
- 181 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 13:58:38 ]
- >>180
とぼけようと必死だな。質問者のお題(>>163)は関数内のexitを再定義すること。 > 関数内のexitをreturnと同じように振舞わせる方法はないでしょうか。 「sourceしたファイル内でのreturn」は全然関係ない。
- 182 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 14:08:28 ]
- >>172 は、
>>171 「sourceしたファイル内で returnできるshには、aliasもある」 のことを「嘘」だと言った。 その >>172 は間違い。 (>>172 では、元の質問のことには触れられていないから、 >>171 自体を質問に関係なく「嘘」と決めつけている。それは当然間違い) 「sourceしたファイル内で returnできるshには、aliasもある」は正しい。
- 183 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 14:09:10 ]
- 彼らは何のために戦っているのだろう。
- 184 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 14:11:55 ]
- なぜ「彼」と限定できるんですか? エスパーですか?
- 185 名前:名無しさん@お腹いっぱい。 mailto:sage [2009/08/04(火) 14:13:25 ]
- エスパーですよ。
|

|