1 名前:名無しさん@お腹いっぱい。 [2008/02/11(月) 19:21:07 ] シェルスクリプトの総合スレです。 スクリプトのお勉強・自慢・腕試しなどにどうぞ。 まずは注意点、リンク、地鎮祭など(>>1-6 くらい)をご覧ください。 □お約束 ・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 bash/zsh/ksh/ashなどに依存する場合は明示しましょう。 Linuxユーザは/bin/shの正体がbashなので特に注意。 ・csh/tcshのシェルスクリプトは推奨されません。 (理由は「csh-whynot」でググれ) ・UNIXにはシェルスクリプトに便利な小さなコマンドがいろいろあります。 manや参考リンクを見ましょう。 aproposないしはman -kでそれらしい単語による簡単な検索もできます。 ・シェルスクリプトのことをシェルってゆーな ・シェルで使えるワイルドカード等は正規表現ではありません。 正規表現の話題はスレ違い(正規表現スレへ) □初心者へのアドバイス: ・適した道具を判断するのも頭の重要な使い方。シェルスクリプトよりも RubyやPerlの方が適した仕事には素直にそちらを使いましょう。 ・知らないコマンドが出てきたらmanを引きましょう。 ・思い通りに動かないときは、まずは sh -x でトレースしましょう。 前スレ シェルスクリプト総合 その9 pc11.2ch.net/test/read.cgi/unix/1187130302/
557 名前:553 mailto:sage [2008/04/02(水) 15:55:02 ] >> 554 本当は、上記に書いてますがシェルスクリプトでmake みたいなことがしたいです。 ちなみに、 >> echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}" >した時点で、${i}の方が常に${i}.oldより新しくなるじゃないか。 で、ハッとして touch ${i}.old をiconvの後にしてみましたが 変わりません。 $ ls -la --time=ctime *.html -rw-r--r-- 1 foo bar 5388 2008-04-02 14:23 SandBox.html -rw-r--r-- 1 foo bar 4323 2008-04-02 14:06 Travel.html $ ls -la --time=ctime *.old -rw-r--r-- 1 foo bar 5374 2008-04-02 14:06 SandBox.html.old -rw-r--r-- 1 foo bar 3334 2008-04-02 14:06 Travel.html.old のようなときに、SandBox.htmlだけ iconv 処理をしたいのです。
558 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 15:56:54 ] >>553 とりあえずforにはdoつけろな。
559 名前:553 [2008/04/02(水) 15:58:24 ] >> 556 御指摘ども、本当のスクリプトには入れてます。 いまは要点だけ抜き出すと、下記のような感じにしています。 do_iconv(){ echo "mv ${i} ${i}.old" echo "iconv -f euc-jp -t utf-8 < ${i}.old > ${i}" echo "touch ${i}.old" } for i in *.html do if [ -e ${i}.old ] then if [[ ${i} -nt ${i}.old ]] then do_iconv fi else do_iconv fi done
560 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:01:10 ] >>557 おい、--time=ctime かよ。mtimeじゃなくて。 シェルの[[ ]] の -nt では、ctimeでの比較はできない。 mtimeのみ。 本当にctimeでやりたいんなら無理。
561 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:06:09 ] えっと、次は、 > うまく動かない の中身プリーズ。
562 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:06:49 ] >>561 >>560
563 名前:553 mailto:sage [2008/04/02(水) 16:22:10 ] >> 561 うまくいかないの、ココロは、意図は、SandBox.htmlだけ iconv したい のですが、プログラムは SandBox.html および Travel.html の 両方を iconv しようとします。 >> 560 ctimeはダメですか。リダイレクトでファイルを作るから、ctimeでないと ファイルの作成時刻を比較できないと思ってました。がーん、他の方法 を考えなくては
564 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:24:32 ] makeを使えばいいんじゃないか?
565 名前:553 mailto:sage [2008/04/02(水) 16:27:05 ] >> 564 はい。makeを使うことを考えます。 ありがとうございました>みなさん
566 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:31:00 ] >>564-565 アフォか。 makeだって mtimeで比較するよ。 ctimeでの比較が必須なら make使ったって問題は解決しない。 (ctimeの意味を誤解していて、実はmtimeでもOKなら話は別だが)
567 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:37:06 ] >>563 >リダイレクトでファイルを作るから、ctimeでないと >ファイルの作成時刻を比較できない ↑ は誤解してるようだね。 だとすると mtimeで比較して問題ないことになる。 とすると、>>559 のスクリプトでうまく動いているはず。 うまく動いているのに、>>557 で --time=ctime で見ているもんだから、 うまく動いていないと思い込んでいるだけ、というオチ。
568 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:39:24 ] 汚いシェル関数だなぁ。echo消せ。引数使え。
569 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 16:50:19 ] [ ] と [[ ]] が同居するスクリプトを初めて見た。どっちかに統一しろよ。 [ ] の方推奨だが。 testの -nt は純正シェルでは使えない。 ${i} なんて書くくらいなら "$i" って書け。 { } 付けただけじゃスペース入りファイル名とかの問題回避できないぞ。
570 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 17:28:49 ] 純正シェル(笑)
571 名前:553 [2008/04/02(水) 17:52:14 ] >> 567 誤解してました。 >> 568 shell関数まで添削してもらえるとは恐縮です。 >> 569 ありがとう。[[ ]]ではなく[ ] を使います。 あと、"$i"の記法はshellの本を注意深く読んだらちゃんと書いてありました。 下記のように直して、実行したら意図どおりに動いてます。m(_"_)m ========================================== #/bin/bash -x do_iconv(){ mv $1 "$1".old /usr/bin/iconv -f euc-jp -t utf-8 < "$1".old > $1 touch "$1".old } for i in *.html do if [ -e "$i".old ] then if [ "$i" -nt "$i".old ] then do_iconv "$i" fi else do_iconv "$i" fi done ======================================
572 名前:553 mailto:sage [2008/04/02(水) 17:52:54 ] bash -x の実行例 + for i in '*.html' + '[' -e SandBox.html.old ']' + '[' SandBox.html -nt SandBox.html.old ']' + do_iconv SandBox.html + mv SandBox.html SandBox.html.old + /usr/bin/iconv -f euc-jp -t utf-8 + touch SandBox.html.old + for i in '*.html' + '[' -e Travel.html.old ']' + '[' Travel.html -nt Travel.html.old ']' + for i in '*.html'
573 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:12:56 ] >>554 の言うように、 "$i".oldの方を編集しない限り、 必ず"$i"の方が新しいのに、(iconvの結果) > if [ "$i" -nt "$i".old ] してる。逆に"$i".oldを編集したら何も行われない。 仕様を日本語で書いたらどうか? たぶん.iconvedを作って、 "$i"と時間比較して新しいものだけiconv、 最後に必ずtouch .iconved、 これでやりたいことに合うんじゃないか?
574 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 19:43:56 ] >>573 その問題は、 >>557 >touch ${i}.old をiconvの後にしてみましたが ↑ で解決済。 というか、>>571 で、「実行したら意図どおりに動いてます。」 ですべて解決済なんだから、これ以上言うことはない。
575 名前:名無しさん@お腹いっぱい。 [2008/04/02(水) 20:00:06 ] カレントディレクトリが /abc/def/ghi/jkl/mno/pqr/stu/ とフルパスであったときに一番最後の部分(stu)を取り出したいのですが どのように書けばよいのですか
576 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:18:40 ] basename /abc/def/ghi/jkl/mno/pqr/stu/
577 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 20:19:16 ] basename `pwd`
578 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:33:15 ] >>551 はいはい、それがお前が出した唯一の根拠ね。 で、それが何かの標準になってるのか? ところで、>>516 ので試みた捏造に関しての弁明はどうした?
579 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/02(水) 21:49:00 ] まだやってんのかw
580 名前:sage [2008/04/05(土) 16:40:16 ] リナックス等の研究やってます。 www.ine.sie.dendai.ac.jp/homepage/ www.ine.sie.dendai.ac.jp/wiki/index.php?FrontPage
581 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:37:45 ] シェルスクリプトから以下のようなテキストを呼びだして、 環境変数を展開した上で、位置変数に set したいのですが、 お知恵を拝借したく、どうかよろしくお願いします。 $ cat test.txt $HOME/doc/ いまは、シェルスクリプト内部で、 sed -e 's/\$HOME/$HOME/g' のようにしています。
582 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 07:40:42 ] >>581 eval set `cat < test.txt`
583 名前:581 mailto:sage [2008/04/10(木) 08:20:51 ] >>582 どうもありがとうございます! eval を使ってもう一度、$HOMEを変数展開をするのですね。 独力では全く思いつきませんでした。 本当にありがとうございました。
584 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:25:30 ] >>582 catが無駄です。
585 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:28:30 ] >>584 catなしでどう書くの?
586 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 08:29:07 ] eval set `< test.txt`
587 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/10(木) 09:30:12 ] はいはい。bash依存。
588 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:28:49 ] 質問です! timeコマンドの結果をファイルに出力したいのですが、 どうやっても0バイトで出力されます。 以下、やってみたことを記載します。 $ time sleep 1 real 0m1.004s user 0m0.000s sys 0m0.001s $ time sleep 1 > hoge.dat real 0m1.439s user 0m0.000s sys 0m0.001s $ cat hoge.dat $ time sleep 1 > hoge.dat 2>&1 real 0m1.009s user 0m0.000s sys 0m0.001s $ cat hoge.dat やってみたこと以上です。 なぜ出力されないのでしょうか?どのようにすれば出力されますでしょうか?
589 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 08:32:44 ] >>588 bash使ってるだろ。 timeはbashの特殊な内部コマンドで、リダイレクトできない。 解決するには一旦サブシェルを通す。 $ (time sleep 1) 2> hoge.dat
590 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:19:02 ] >>588 /usr/bin/timeならファイルに出力できるよ。
591 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 11:37:22 ] >>590 >>589 /usr/bin/time は表示書式が違う
592 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:39:52 ] \time
593 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:40:30 ] bashってtimeが内部コマンドなのかw
594 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:44:15 ] 正確には shell keyword
595 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:50:22 ] あれ? マニュアルではtimeじゃなくて、timesになっているけど?
596 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:51:30 ] >>595 ぉぃぉぃ、timesとtimeは全く別のコマンド
597 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 14:58:21 ] times Print the accumulated user and system times for the shell and for processes run from the shell. The return status is 0. ごめん。マニュアル読んだだけでは何が違うのか分からん。 それに、timeの項目自体が見つからんし。
598 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:05:56 ] bash なら help time
599 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/11(金) 15:06:37 ] man bash なら Pipelines の節。
600 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 00:11:45 ] しぇるすぷりくとでHTML書いて ボタン押したらhoge.shを実行したい ヒントください><;
601 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:02:36 ] >>600 実行環境を限定しなさい。 OSは? httpサーバは? 使用可能なCGIは? CGI実行時のセキュリティ要件は?
602 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 01:29:51 ] OS: FreeBSD 6.3-RELEASE-p1 http: Apache HTTP Server 2.2.8 CGI: This is perl, v5.8.8 built for i386-freebsd-64int セキュリティ要件: 無し
603 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 01:40:48 ] >>600 すみません、日本語でお願いします。
604 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 02:00:52 ] 日本語で書いたつもりなのに文字化けしてるんですか?><
605 名前:>>588 mailto:sage [2008/04/12(土) 06:09:32 ] >>589 ありがとうございます。
606 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 06:21:07 ] これシェルスクリプトの話か・・・?
607 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:16:24 ] >>601 答えられないくせに実行環境だけ聞くなよ。 実行環境あまり関係ないだろ。
608 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 07:24:57 ] >>600 エスパーすると、Webのフォーム入力でシェルスクリプトを入力して [送信]ボタンを押すと、そのシェルスクリプトが実行されて、 実行結果がWeb上に表示される、って感じのものを作りたいのかな?
609 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:21:01 ] エスパーじゃなくてもシェルスクリプトでCGIプログラム作りたいという事はわかる、>>601 が無能なだけ。 >使用可能なCGIは? この質問に至っては噴飯ものだ。 CGI/1.1と答えればいいのだろうか? >>600 CGIというサーバー上でプログラムを動かす仕組みがあるから、検索してわからない事があったらまた来なさい。
610 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 09:52:37 ] >>609 「シェルスクリプトでCGIプログラム作りたい」のじゃなくて、(さすがにそれは知ってるだろ) ユーザーがWeb上で入力したシェルスクリプトを実行してくれるような CGIを作りたいんじゃないのか?
611 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:26:00 ] まぁまぁ、ここは有能な>>609 に任せておいたらどうだ
612 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:38:47 ] >>610 >>600 からそこまで読み取れるなんて想像力がたくましいな。 でも俺に聞かれても困る。元質問者に聞いてくれ(そして、板違いだからwebprog行け) それとも「CGIを作る? CGI/1.2とかいう新しい規約でも作りたいのか?」と突っ込んで欲しいのか? >>611 == >>601 だな。無能という事実を突きつけられて悔しかったのか? > 使用可能なCGIは? この質問で意図した事を答えてみろ。
613 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:43:06 ] hoge.sh は実在します。例示には example.com 等を使いましょう。
614 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 10:51:55 ] >>612 > >>611 == >>601 だな。 違うよ。
615 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:11:59 ] >>602 読むと、CGI自体はperlで作るらしいから、 >>610 の解釈が正しそうだな
616 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 11:53:43 ] saryのように高速でかつgrep並みの正規表現検索ができるユーティリティってありませんかね? libstreeとか使って誰か作ってそうな気がするんですが、ぜんぜん見つかりません
617 名前:名無しさん@お腹いっぱい。 [2008/04/12(土) 21:54:43 ] hoge.sh はドメインじゃなくて スクリプト名では・・・
618 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 22:01:28 ] ネタにマジレス
619 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/12(土) 23:54:44 ] 実際にwhoisしてみると、空いているらしい。>hoge.sh
620 名前:600 mailto:sage [2008/04/13(日) 00:33:33 ] >>602 |しぇるすぷりくとでHTML書いて $create.sh > /usr/local/www/html.html $cat create.sh #!/bin/sh echo \<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\> echo \<HTML LANG=ja\> echo \<HEAD\> echo \<meta http-equiv=\"content-style-type\" content=\"text/css\"\> echo \<META HTTP-EQUIV=Content-Type CONTENT=\"text/html\; charset=EUC-JP\"\> echo \<META name=\"generator\" content=\"shell script\"\> echo \<LINK REV=made HREF=\"mailto:yourmailaddress@your.mail.domain.com\"\> echo \<LINK REL=contents HREF=\"./index.htm\"\> echo \<LINK REL=stylesheet HREF=\"./default.css\" TYPE=\"text/css\" TITLE=\"./default.css\" MEDIA=\"screen,tv\"\> echo \<TITLE\>sample\</TITLE\> echo \</HEAD\> echo \<BODY\> echo \<FORM ACTION=\"/cgi-bin/hoge.cgi\" METHOD=\"POST\" ENCTYPE=\"text/plain\" LANG=\"ja\"\> echo \<div\>\<INPUT TYPE=\"submit\" TABINDEX=\"0\" ACCESSKEY=\"S\"\>\</div\> echo \</FORM\> echo \</BODY\> echo \</HTML\> |ボタン押したらhoge.shを実行したい セキュリティ要件:なしなら、perlスクリプト内に以下のように書けば... $list[0] = "hoge.sh" system "/bin/sh", @list;
621 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 07:32:30 ] >>620 お前 >>600 じゃなくて >>601 だろ。 echoが無駄です。echoは1個だけでできます。 perlのsystemでも、一旦listに入れるのが無駄です。 あと、そもそも >>600 の質問意図とは違うと思います。
622 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:30:33 ] echo1つで済むつーか、catとヒアドキュメントの出番じゃね?
623 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 10:37:58 ] ヒアドキュメントはテンポラ作るから嫌い。echo 1つがスマート。
624 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:44:04 ] テンポラリ作るとまずいことでもあるんですか?
625 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 11:51:04 ] >>623 どこにできるんだ?
626 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:16:26 ] >>624 意味もなくHDDに書き込むのが無駄。 >>625 教えて欲しければ「教えてください」と家。 普通は /tmpにできる。シェル側からすぐに unlinkされるから lsでは見えないけど。トレースすればわかる。
627 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 12:57:52 ] >626 実装による? Linuxのzshとbashで strace cat <<HOGE hoge HOGE としてみたけど別にテンポラリファイル作ってなかった。 fd3番以降を開いてるのは共有ライブラリのリンク時くらい。 "hoge¥n"のreadは0から。 dupとかなかったから、ファイル開いてリダイレクト処理をしたわけでもないな。
628 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:18:32 ] >>627 トレースが下手だな catをstraceしてもしょうがないだろ。 bashやzshをstraceすること。 catに渡される時にはすでにunlinkされてるから、 catをstraceしても見つからないはず。
629 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:35:53 ] (bashの場合) $ strace -f bash -c 'cat << EOF hoge EOF ' (中略) : [pid 11486] open("/tmp/sh-thd-1208089889", O_RDONLY|O_LARGEFILE) = 4 [pid 11486] unlink("/tmp/sh-thd-1208089889") = 0 テンポラリファイル作ってるね。 (zshの場合) $ strace -f zsh -c 'cat << EOF hoge EOF ' (中略) : open("/tmp/zsh6MaAd3", O_RDONLY|O_NOCTTY|O_LARGEFILE) = 3 unlink("/tmp/zsh6MaAd3") = 0 テンポラリファイル作ってるね。
630 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:36:32 ] $ strace -o bash.log bash bash-3.1$ cat <<HOGE > hoge > HOGE hoge bash-3.1$ exit $ egrep '(creat|unlink)' bash.log (なにもなし) だめか。どうやって確認すればいいか、正しいやり方を教えてけろ。
631 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 13:37:09 ] あああ、-fか。理解。
632 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:38:06 ] /tmpの日付見ればいいんじゃないの?
633 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 16:59:54 ] catだとすぐ終了しちゃうから、tail -fを使うと良い。 $ tail -f << EOF hoge EOF ってやっておいて、別のxtermから、 $ lsof | grep tail ってやると、(deleted)って表示されてる /tmp以下の一時ファイルがあるのがわかる。
634 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:23:23 ] >>632 それだけだと、無関係のプロセスが/tmpをいじくった可能性が残る。
635 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:33:54 ] 忙しくないマシンで何回かやれば可能性は実用上0になるだろ
636 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:36:00 ] それで満足ならいいんじゃね?
637 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 17:59:36 ] >>633 がもっといい方法示してるじゃないか。
638 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 19:53:17 ] >>626 礼儀知らずで申し分けありませんでした。テンポラリファイルを作るというこ とは、シングルユーザーモードなどで、リードオンリーファイルシステムだと here doc を使ったシェルスクリプトは動かないということでしょうか?
639 名前:名無しさん@お腹いっぱい。 [2008/04/13(日) 20:15:12 ] エディタの置き換えでも出来る事なのですが良ければ教えてください わるs わるk わるi わりこn わりこm わりあt じょうち じょうちょう じょうなん のように語尾にアルファベットが付いているのと付いてないのがあるんですけど アルファベットを削除する方法とかってSEDではどのようにするのでしょうか?
640 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:20:09 ] >>639 sed 's/[a-z]$//'
641 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/13(日) 20:56:04 ] >>586-587 bash依存じゃないだろ。kshでも使えるから、標準で使っていいんじゃないの?
642 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 02:04:22 ] >>641 読まずにりぷらい、まあ、もちつけ共通拡張かも知れないだろ。 POSIXに規定されているか読みなおすんだ。
643 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:18:12 ] 配列の値の設定ってバックスラッシュか何かで 複数行にまたがって書くことはできないのでしょうか?
644 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 13:36:12 ] >>643 できる。シングルクォートを使うのがいい。 $ hoge=('aaa aaa aaa' 'bbb bbb bbb') $ echo "${hoge[0]}" aaa aaa aaa $ echo "${hoge[1]}" bbb bbb bbb
645 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 14:56:04 ] >>644 どうもありがとうです
646 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 15:00:53 ] はいはい、バッシュ依存。
647 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/14(月) 21:22:58 ] kshでも使えるからデファクトだろ?
648 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:24:12 ] Solaris8上でBourne Shellを用いてスクリプトを書いています。 dateコマンドを整形する際にシングルクォートで括りますが、 $ echo `date '+%H%M` などとしても通ってしまうのは何故なんでしょうか?
649 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 13:54:55 ] >>648 Solarisのバグです。シングルクォートはちゃんと閉じましょう。
650 名前:名無しさん@お腹いっぱい。 [2008/04/15(火) 20:40:12 ] シェルを始めたのですが、変数でいきなり詰まりました >< $i = 123; =: command not found もしかしてシェルでは = は外部コマンドなんでしょうか?
651 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:47:30 ] 何シェルかくらいかこうぜ・・・ i=123
652 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:49:37 ] >>651 今度はこうなります i = 123 i: command not found
653 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 20:57:39 ] >>651 のをコピペしな あと、何シェルかくらいかこうぜ・・・
654 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:03:03 ] >>653 この場合何シェルか関係あるか??
655 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:24:30 ] 関係有るから指摘している。 が、cshだったら他所へ行ってくれ。
656 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:26:27 ] cshだったらエラーメッセージが違うじゃん。回答者はそれくらい見抜かないと。
657 名前:名無しさん@お腹いっぱい。 mailto:sage [2008/04/15(火) 21:27:17 ] >□お約束 >・特記なき場合はBourne Shell(/bin/sh)がデフォルトです。 > bash/zsh/ksh/ashなどに依存する場合は明示しましょう。