タグ

Shellに関するpmakinoのブックマーク (86)

  • シェルスクリプトで標準入力を加工する際の注意点 : DSAS開発者の部屋

    シェルスクリプトで標準入力を加工する際に若干ハマリかけたので、今回はそのお話をしたいと思います。 みなさんのシェルスクリプトライフの一助になれば幸いです。 標準入力を加工するシェル関数、例えば、 入力を文とするメールを送るシェル関数 ログを入力として受け取り、集計や解析をするシェル関数 を書く場合、みなさんどういう風に書いているでしょうか。 私は今までこんな風に書いていました… send_mail() { from='sender@example.org' to='receiver@example.org' { echo "From: ${from}" echo "To: ${to}" echo "Subject: test" echo cat - } | qmail-inject -A -f${from} } make_mail_body | send_mail これの何が問題かという

    シェルスクリプトで標準入力を加工する際の注意点 : DSAS開発者の部屋
  • 無精で短気で傲慢なプログラマ find には sh!

    ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック% find . -name '*~' -exec rm {} \; 404 Blog Not Found:勝手に添削 - find(1)% find . -type f -name '*~' | xargs rm % find . -type f -name '*~' | perl -nle unlink わたしなら% find . -type f -name '*~' | sed 's/^/rm /'で確認し、OK なら% find . -type f -name '*~' | sed 's/^/rm /' | shで消します。 いまどき fork/exec rm のオーバーヘッドがどれほどのものか。 xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに rm

  • 漢のzsh | コラム | エンタープライズ | マイコミジャーナル

    新着記事一覧 田中麗奈、初舞台で「嫁姑仲は順調です」 - 舞台『思い出トランプ』 [11:00 10/11]  【レポート】ソーシャルレンディングサービスの気になるメリット・デメリット-- maneoの妹尾賢俊社長に聞く [09:00 10/11]  【レポート】秋葉原アイテム巡り - 「マクロス」シリーズが秋葉原をジャック! 歌は世界(秋葉原)を救う!? [04:36 10/11]  「ロックマン9 アレンジサウンドトラック」のインストアイベントが開催決定 [03:25 10/11]  DS『流星のロックマン3』、PR貴族に"髭男爵"が就任! 楽曲タイアップも決定 [03:03 10/11]  ゼンリン、600カ所の紅葉スポットの情報を提供 - 色づき具合を15段階で表示 [02:46 10/11]  TVアニメ『ドルアーガの塔〜the Sword of URUK〜』、2009年1月放送

  • 【コラム】漢のzsh (7) ひと味違うzshのリダイレクト | エンタープライズ | マイコミジャーナル

    リダイレクトはシェルに欠かせない機能の一つだ。標準出/入力をファイルへ向けたり、標準出力を標準エラー出力へ向けたり、また、その逆もできる。リダイレクトはできるシェル使いの第1歩。"command > /dev/null 2>&1"とかっこよくやってみたいもの。 zshも当然リダイレクト機能を持っている。しかし、zshのリダイレクトはbashやtcshのそれとはひと味違う。zshでは最初からリスト1.1の設定が有効になっており、bashやtcshではデフォルトでは実現されていない機能もサポートしている。今回はzshのリダイレクト機能を紹介しておこう。 リスト1.1 multiosオプション - デフォルトで有効になっている % setopt multios リダイレクト先を複数設定 echoコマンドでテキストを出力して、リダイレクトさせてファイルへ書き込む。これはシェル操作の最初の一歩だが、

  • findの用法あれこれ - 18 til i die (another phase)

    dankogaiさんのblogでいろいろと書かれていて参考になったというかほぼその通りだと思ったのだけど、いくつか違和感が。 .htmlだけ見つけたい時も % find . -type f -name \*.htmlでOK。findはシェルのワイルドカードを受け付ける。ただしシェルにそれを展開して欲しくないので、\でエスケープしている。 findとか、他のコマンドにシェルのワイルドカードを渡したいときは何も考えず機械的にシングルクォートで % find . -type f -name '*.html'と書くようにしているのだが、どうなんでしょうか。確かにスラッシュ1つの方がタイプ数は少ないが、.htmも含めてバックアップファイルだけ探そうと思って % find . -type f -name \*.htm\?.\*とかするともう見ただけで発狂しそうになるのは私だけ?(w あと、otsune

    findの用法あれこれ - 18 til i die (another phase)
  • void GraphicWizardsLair( void ); //

  • 勝手に添削 - find(1) : 404 Blog Not Found

    2007年03月30日00:15 カテゴリ一日一行野郎Lightweight Languages 勝手に添削 - find(1) 「ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック」の用法に首を傾げたので。 まずはこちら。 $ find . -type f | fgrep index.html これは % find . -type f -name index.html でOK。パイプ不要。.htmlだけ見つけたい時も % find . -type f -name \*.html でOK。findはシェルのワイルドカードを受け付ける。ただしシェルにそれを展開して欲しくないので、\でエスケープしている。要は $ find . -name '*~' と同じなのだが、なんで上記の例でfgrepを使っているか不明。 ここからが番。 $ find . -nam

    勝手に添削 - find(1) : 404 Blog Not Found
  • システム管理に使えるファイル更新監視テク - 技術メモ帳

    システム管理とかしてると、特定のディレクトリ以下のファイルの更新を 調べたいときとかっていうのはわりとある。 どんなファイルが更新されてどういった内容に変化したのかを見える化。 またしても Linux / watch ネタだ。FreeBSDはportsで、mac osx(darwin)は どこかで公開されてたdmgを使ってる。 中毒性があるので未成年の使用は禁止されている。 カレントディレクトリ内のファイルを 最近更新があったファイルを上の方に表示し、 最終行2行を表示し続けるもの。 $ watch -n2 'tail -n2 `ls -t`' Every 2s: tail -n2 `ls -t` Wed Feb 28 01:04:40 2007 ==> test2.txt <== unko ==> test4.txt <== aiueoadfsaf ==> test1.txt <== e

  • perl でインタラクティブなシェルを実現する perlsh

    perl でインタラクティブなシェルを実現する perlsh 2006-01-11-7: [Perl] http://d.hatena.ne.jp/secondlife/20060111/1136975310 Term::ReadLine::Gnu に含まれている perlsh. \Term-ReadLine-Gnu-1.15\eg にファイルがある.make install ではインストールされないので,手動でパスの通ったところに置く必要がある. 似たようなことは,Perl のデバッグモードでもできるけど,perlsh の方が便利. % perlsh main[1]$ @ary = qw(1 2 3 4 5) 1 2 3 4 5 main[2]$ map { $_ * $_ } grep { $_ % 2 } @ary 1 9 25 同じことを Perl のデバッグモードですると以下のよ

  • perl でインタラクティブなシェルを実現する perlsh - 2nd life (移転しました)

    http://search.cpan.org/~hayashi/Term-ReadLine-Gnu-1.15/eg/perlsh 最近 perl を勉強中で、ちょくちょく挙動に関する疑問が出てきます。ですが Ruby における irb のようなインタラクティブシェルが無い(と思っていた)ため、挙動をちょくちょく調べるのに、エディタ開いてソース書いたりしていてめんどくさい!と思ってたりします。 しかし今日 id:hideoki が挙動チェックでなにやら便利そうな対話型のシェルを使っており、それが perlsh というインタラクティブなシェルでした。 $ perlsh # 起動 main[10]$ @ary = qw(1 2 3 4 5) 1 2 3 4 5 main[11]$ map { $_ * $_ } grep { $_ % 2 } @ary 1 9 25 のように対話的に実行でき、返

    perl でインタラクティブなシェルを実現する perlsh - 2nd life (移転しました)
  • Shell::Perl と pirl を試してみる : blog.nomadscafe.jp

    Shell::Perl と pirl を試してみる id:naoya氏がブクマしてたのを見て入れてみた。 pirlは、perlshのような対話型のperlシェルです。 Shell::Perlをinstallしようとすると、新しいExtUtils::MakeMakerを要求されるので、cpanコマンドでいれずに、Makefile.PLを書き換えた -use ExtUtils::MakeMaker 6.31; +use ExtUtils::MakeMaker; 同時にinstallされるpirlコマンドを実行するとこんな感じ。 $ pirl [~] Welcome to the Perl shell. Type ':help' for more information pirl @> 1+1 2 pirl @> log 10 "2.30258509299405" pirl @> :helpでヘ

  • ITmedia エンタープライズ:あるWebプログラマーの作業環境――豪傑の三種の神器【後編】 (1/3)

    Zshを使おう! 前回紹介したWebアプリケーション開発における三種の神器。GNU Emacs、GNU screenと紹介してきましたが、締めくくりはZshです。ZshはBashやtcshなどと同じUNIXのシェルですが、プログラマー向けにさまざまな機能を搭載した高機能シェルといえます。Bashやtcshと比較して、機能的に大きく違うわけではありませんが、細かな使い勝手でほかのシェルにはない便利さが感じられると思います。 またわたしがほかのどのシェルよりもZshを推薦するのには理由があります。 Bashにしてもtcshにしても、シェル上で実行したコマンドをさかのぼる際にはCtrl+Rキーを押して、履歴のインクリメンタルサーチを行うのが便利です。例えばBashでは、

    ITmedia エンタープライズ:あるWebプログラマーの作業環境――豪傑の三種の神器【後編】 (1/3)
  • 同じコマンドを複数のサーバで実行 : blog.nomadscafe.jp

    同じコマンドを複数のサーバで実行 Assurerにシェルモードが追加されたので、もういいかなという感じですが、自分の使っているスクリプトをさらしてみる。 sshで1つのコマンドを複数のサーバに順番に実行させていけます。 「password:」のプロンプトに対して、expectを使って自動で入力する機能もあるので、sudoなどにも対応 mssh -f list.txt -u user -p -- id -f ファイル名: ホスト名が書いてあるファイル名。1行1ホスト -u ユーザ名: ログインするユーザ名 -p: パスワードを使うフラグ --: これ以降にコマンド 以下ソース #!/usr/bin/perl package MSH; use strict; use warnings; use Expect; sub new { my $class = shift; bless {@_}, $

  • xargsコマンドを使って指定したコマンドを並列実行させる - 技術メモ帳

    あまり知られていないが、GNUのxargsコマンドには、 プロセスの最大数を設定できるオプションというのが用意されている。 コレを使って、プロセスを並列実行させてみよう。 xargs --max-procs=MAX-PROCS -P MAX-PROCS command MAX-PROCSに数字を指定すると、 最大で、その数だけ command プロセスを生成する。 デフォルトは、1プロセスだけになっている。 いくつか例を交えて説明する。 サンプルとして、以下のようにURLが行ごとに記述されたファイルを元に curlをxargsで並列実行して、HTMLデータを取得してみよう。 $ cat ./url_list.txt http://www.google.co.jp/ http://www.yahoo.co.jp/ http://b.hatena.ne.jp/ まず、普通にxargsを使ってc

    pmakino
    pmakino 2007/01/18
    知らなかった…
  • http://www1.parkcity.ne.jp/chaichan/src/BSH.htm

  • 複数のファイルの名前をまとめて変更する on zsh - 技術メモ帳

    最も簡単なやり方を紹介するのを忘れていた。 for file (*.html) mv $file $file:r.htm

  • 入力履歴からの予測による自動補完機能 - 技術メモ帳

    zshには、過去の入力履歴から予測し、 リアルタイムに自動補完してくれるという機能というのがあるようだ。 predict-on というのが該当する。 例えば以下の画像は、 この機能を有効にした状態で 'h' とだけ入力した状態だ。 Enter キーを押すだけでただちに実行できる。 なんだか、結構便利だったので 以下のような設定で使用する事にした。 % autoload predict-on % zle -N predict-on % zle -N predict-off % bindkey '^X^Z' predict-on % bindkey '^Z' predict-off % zstyle ':predict' verbose true zsh の man で載っているキーバインドに設定してみた。 Ctrl+X Ctrl+Z で predictモードが ON になり、 Ctrl+Z

    入力履歴からの予測による自動補完機能 - 技術メモ帳
  • 指定されたファイルの上からN行目、下からM行目までの範囲を抽出 - 技術メモ帳

    http://d.hatena.ne.jp/parasporospa/20061130/p3 全然テストしてないですが、一番上の "指定されたファイルの上からN行目、下からM行目までの範囲を抽出" するやつをやってみました。 tail +N という普段使わない奇妙な引数で、 N行め以降が取得できる、というのを利用しました。 body () { F=$1; N=$2; M=$3 tail +$((N+1)) < "$F" | tail -r | tail +$((M+1)) | tail -r } 動作テスト(zsh) $ cat test.txt 1 2 3 4 5 6 7 8 9 10 $ body ./test.txt 1 1 2 3 4 5 6 7 8 9 $ body ./test.txt 2 3 3 4 5 6 7 $ body ./test.txt 0 9 1 ファイルを二回も

  • xargs.cmd - oogatta のブログ

    はじめて xargs ちゃんに出会って以来、彼女のことが頭から離れなくて色々検索した結果、Windows 用に気合いでバッチを作った猛者の方がいらっしゃった! xargs.cmd 標準入力からの引数でコマンドを繰り返し実行するバッチファイル(CMD) 猛者だ…。そんなわけで NYACUS で使い倒す findf ./ -name "*.html" | largs egrep -l -e "u[nm]ko|ti[nm]po" %Iはいきた!。徹夜作業などで朦朧とし、うっかり手が滑ってヒワイな言葉をコメントに書いたりしてないかを確実にチェック。これで納品時も安心です。 物と違って %I が必要だったりしますが、これって Windows のプロンプトの FOR文 の変数だそうなので、help FOR で出てくるオプション構文あれこれが使えちゃいます。 %~I - すべての引用句 (") を削除

    xargs.cmd - oogatta のブログ
    pmakino
    pmakino 2006/11/30
    はじめて xargs ちゃんに出会って以来、彼女のことが頭から離れなくて色々検索した結果、Windows 用に気合いでバッチを作った猛者の方がいらっしゃった!
  • 技術メモ帳: [unix]複数のファイルの名前をまとめて変更する

    複数のファイルの名前を変更する際に、 便利なコマンドというものがある。 いくつかご紹介させていただこう。 カレントディレクトリにあるファイルの名前を、 たとえば、*.html を *.htm と名前を変更するという課題に対し どのぐらいエレガントに書けるかというのを比較してみる。 まず、普通にやったらどうだろう。 おそらく、for文 をつかうことだろう。 for file in *.html do base=`basename $file .html` mv $base.html $base.htm; done; zshだともうちょっとスマートにかけて、 for file in *.html do mv $file:r.html $file:r.html; done; こんな具合。 for文 が嫌いなネット右翼のために、 xargs を使ってこの問題を解いてみよう。 ls -1 *.htm