タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

ProgrammingとUnixとShellに関するagwのブックマーク (164)

  • シェル(bash)のfor文の違いを吸収するMakefileの書き方 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    GNU bashにもいろいろなバージョンがあります。最新は 3.2.* らしいです。1.14.* なんて古いのもまだ使えます。さて、次のfor文はシェルのバージョンにより挙動が違います。 $ for x in ; do echo $x; done GNU bash, version 3.00.15(1)-release (i686-redhat-linux-gnu) だと何も実行されませんが、エラーでもありません。GNU bash, version 2.04.0(1)-release (i686-pc-msys) だと、次のエラーになります。 sh: syntax error near unexpected token `;' この違いはMakefileを書くときも問題になります。 dothis: for x in $(LIST); do\ echo "$$x";\ done のように書い

    シェル(bash)のfor文の違いを吸収するMakefileの書き方 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • デーモンプログラムの基礎知識

    ゾンビプロセスを作らないために デーモンプロセスは、自分が起動されたシェルなどを外界から切り離すために、常駐処理をforkして親プロセスを終了させます。 通常の処理では、親プロセスは子プロセスの終了状態(終了ステータス)を監視しますが、デーモンプロセスは、常駐処理が動き始めると不要になります。このため、子プロセスの終了状態が必要ないことをシステムに宣言しなければなりません。そうすれば、常駐処理が終了しなくても親プロセスは終了してしまい、ゾンビプロセスとしてシステムに残ることはなくなります。 標準入出力 デーモンの動作を行うと、少なくとも stdin, stdout, stderr は必要なくなります。 Python では os.dup2 を使って標準入出力と標準エラー出力のファイル・ディスクリプタをクローズします。 out_log = file('/out/log/file/name',

    デーモンプログラムの基礎知識
    agw
    agw 2008/04/05
    ファイルディスクリプタの切り替え例。
  • UNIXの部屋 検索-リダイレクト

    最終更新 2019-01-27 UNIX/Linux のシェル sh・bash・csh・tcsh のリダイレクトを説明する。ファイルへの出力、コマンド出力を別のコマンドの入力とする、標準入力・標準出力・標準エラー出力、パイプなどもあわせて説明する。

  • シェルのリダイレクトにまつわる失敗

    Landscape トップページ | < 前の日 2004-03-27 2004-03-28 次の日 2004-03-30 > Landscape - エンジニアのメモ 2004-03-28 シェルのリダイレクトにまつわる失敗 当サイト内を Google 検索できます * シェルのリダイレクトにまつわる失敗この記事の直リンクURL: Permlink | この記事が属するカテゴリ: [bash] シェルのリダイレクトについての理解が不十分なためにやってしまった失敗。 標準出力も標準エラー出力も /dev/null に捨てたいとき、間違えて以下のようにしてしまうことがときどきあった。最近はやらなくなったが。 # 間違い $ command 2>&1 >/dev/nullこれだと command の標準出力は /dev/null に向けられるが、command の標準エラー出力は画面に向いてし

  • パイプ - odz buffer

    Unix(or its variants)のシェルがどうやってるのかは知らないけど (少し前に Artonさんのところで何か見たような記憶はあるが)、 Windowsの場合は大まかに コンソール プロセスを生成して標準ハンドルをリダイレクトする方法 にあるように 入力用、出力用の二つの無名パイプを作る(CreatePipe) → それぞれを起動する子プロセスのための 標準入力、標準出力および標準エラー出力用のハンドルににDuplicateHandle → 得られたリダイレクト用のハンドルを用いて CreateProcess という手順になるので、 複数段のパイプの尻尾から順番にこのハンドルの複写手順を取りながら 必要なプロセスを起動していくのではなかろうかと。 んー cmdline.split('\|').each{|prc| ほげほげ} て感じ? おー、UNIX も Windows もあ

    パイプ - odz buffer
  • builtin と fork/exec と - odz buffer

    ref:404 Blog Not Found:あわてるな ディスクはそんなに 速くない コメント欄から 最後の例がそこそこ速いように見えていますが、echo じゃなくてディスクに触る処理だと結果は大きく変わるのでは。 いやいやいや。そういう話ではなくて、echo は shell の組み込みだから fork していないだけの話ですよ。以下、zsh で % find -type f -name '*.java' | wc -l 267 % time find -type f -name '*.java' | sed 's!^!echo !' | sh > /dev/null find -type f -name '*.java' 0.01s user 0.01s system 73% cpu 0.027 total sed 's!^!echo !' 0.01s user 0.00s syste

    builtin と fork/exec と - odz buffer
  • レポジトリとファイルの削除に関わるいやな思い出 - odz buffer

    間違えてリポジトリを消した私は豆腐の角に頭をぶつけるしかないのか。(ぶ レポジトリはホームディレクトリの外に作りましょう、という話ではないだろうか。基的には直接いじる必要ないし。 そういや、5、6年前に Java のコードを書いていて Jakarta Ant*1 でビルドしていたんだけども、あるときに <mkdir dir="~/target" />みたいなことを書いて実行したらプロジェクトのディレクトリ直下に "~" というディレクトリができてしまった。当時は "~" を shell が展開していることも理解していない阿呆だったわけだが、間違って作ってしまったディレクトリを削除しようと、直後に rm -rf ~なコマンドを実行した。ENTER を押した瞬間、「あー」となったのは言うまでもない。 まぁ、コードは全て別サーバの CVS に入れてあったので最悪の事態は避けられたわけだが、.e

    レポジトリとファイルの削除に関わるいやな思い出 - odz buffer
  • xargs + shell script のはまりどころ - odz buffer

    昨今、Java でプログラムを書く場合に外部ライブラリに依存することが多いと思うのだけども*1、そういう場合 #!/bin/sh java -cp commons-lang.jar:commons-logging.jar:log4j.jar:classes com.example.Foo "$@" な shell script を用意して使うことが多い*2。 で、この場合 find . -type f -print0 | xargs -0 -e ./foo.shてなことをやると、実際に java を起動する場合のコマンドラインが ARG_MAX を超えるなんて羽目になってはまる罠。 というようなことを誰も書かないなぁ、と思って書いてみたわけだけど、これって常識ではないんだろうか。だからこそだれも書かないのかな? *1:Javaの場合コンパイル済みの JAR に CLASSPATH を通すだ

    xargs + shell script のはまりどころ - odz buffer
  • findのあれとか - odz buffer

    find + rm ネタが微妙に盛り上がっているようだけど、消えて困るようなファイルはバージョン管理に入れておけという話だ。 あと、sed を使ってコマンド列に変換して sh にわせる方法は、ファイル名に '*' とか '?' とか '\' とか入っていると死ねる罠。そんなに間違って消すのが怖いなら find . -type f -name '*~' -print0 | xargs -0 -e rm -iでいいんでないの?む、xargs に -e をつけろって話は出てきてないような。 そういえば、ファイル名に改行ってのは出来るんだっけ? 追記 xargs rm -i はうまく動かないようだ。GNU の xargs なら xargs -p などを使ったほうがよさそう。

    findのあれとか - odz buffer
    agw
    agw 2007/04/11
    xargsの-eオプション。
  • 無精で短気で傲慢なプログラマ 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

  • あわてるな ディスクはそんなに 速くない : 404 Blog Not Found

    2007年03月30日04:30 カテゴリiTech あわてるな ディスクはそんなに 速くない 誤差の範囲かどうかは、ファイル数による。 無精で短気で傲慢なプログラマ | find には sh! いまどき fork/exec rm のオーバーヘッドがどれほどのものか。 xargs を使うとき、rm が 1回だけ実行されるときと、ARG_MAX を超えたときに rm が複数回実行されるときの違いにどれほどの差があると言うのか。 誤差の範囲である。 ファイル数が数百ぐらいなら大差はないが、それが数万、数十万ともなると話は違ってくる。なにしろ相手はCPUではなくHDD。こちらはCPUほど高速ではないのだ。 実際、ベンチマークを取ってみると、結構な差があることがわかる。特に-execは遅い。そして、shをカジュアルにpipeで使うのはワイルドカードが恐ろしい。 よくきたはてダ - また添削してくれ

    あわてるな ディスクはそんなに 速くない : 404 Blog Not Found
  • --も忘れずに - odz buffer

    ref:void GraphicWizardsLair( void ); // いまどきfindとxargsを使う時は-print0と-0を忘れずに まったく同感。 あと、find ならディレクトリ名を含むことになるから問題ないと思うけど*1、ファイル名が0x2d(-)から始まっていたりするとはまる罠。 例。 % ls -z % cat * cat: invalid option -- z Try `cat --help' for more information.こういう場合は、こうする % cat -- *まぁ、POSIX で規定されているわけではないけどね。でもそれを言うと -print0 も -0 も POSIX に規定されていなかったりして。 *1:いや検索対象のパス自体に問題があるとアウトだけど

    --も忘れずに - odz buffer
    agw
    agw 2007/04/11
    「find ならディレクトリ名を含むことになるから問題ないと思うけど*1、ファイル名が0x2d(-)から始まっていたりするとはまる罠。」
  • また添削してくれた!! - elf's blog

    まずはこちら。 $ find . -type f | fgrep index.html (snip) $ find . -name '*~' と同じなのだが、なんで上記の例でfgrepを使っているか不明。 あっはっはっは. 不明といわれても仕方がないですね.仰るとおりです(痛 普段find&lgrepはよく使ってるんですが,退職手続きと最後の会議群をしつつ書いているといい例が思いつかなくてギリギリ書いた感じでした. はい100%クオリティの言い訳です(痛 ここからが番。 $ find . -name '*~' -exec rm {} \; この-exec、かつては有用だったがxargsやperlがある昨今ではあまり使わない。 はい.id:odzたんとこでもコメントしたんですが,xargsは好きではないのであえてなるべく使っていません. xargsが有用かつfindの-execな対象があま

    また添削してくれた!! - elf's blog
  • 気をつけろ - odz buffer

    ref:ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック いわゆる指定された文字列を出力するコマンドですね. 知らない人も多いみたいですが,echoも実はいくつかのオプションを受け付けます. 気をつけろ。いまどきの echo は大抵 shell の組み込みコマンドだ。bash/zsh では echo(1) と同じ挙動を示すが、tcsh は違う。 % tcsh % set echo_style=none; echo -n hello -n hello % set echo_style=bsd; echo -n hello hello % set echo_style=sysv; echo -n hello -n hello % set echo_style=both; echo -n hello hellosedは通常行指向でテキストの置換などを行うと

    気をつけろ - odz buffer
  • シェル・スクリプト・リファレンス・ランキング

    Linuxで一連の処理を行う際には,シェル・スクリプトが役立ちます。シェル・スクリプトは,シェル上で同じような操作を続けるときや複雑な操作を行いたいときに,その操作手順をテキスト形式で記述しておき,任意に実行できるファイルです。定型的な処理を繰り返し実行するときに便利ですが,シェル・スクリプトを作成するには,記述のルールなどを知っておく必要があります。 日経LinuxのWebサイトでは,シェル・スクリプトの使い方について紹介した「シェル・スクリプト・リファレンス」を公開しています。シェル・スクリプトの基的な知識から,変数の扱い方,繰り返しや条件分岐などの記述方法,シェル・スクリプトで便利に利用できるコマンドなどを紹介しています。 日経Linuxは2006年3月1日に,シェル・スクリプト・リファレンスをITproに公開しました。公開後1年が経過したのを契機に,過去1年間によく閲覧された項目

    シェル・スクリプト・リファレンス・ランキング
  • リダイレクトの奥義 - メモ帳

    exec 3>&1; grep yyy xxx 2>&1 1>&3 3>&- | sed s/file/foobar/ 1>&2 3>&- grep: xxx: No such foobar or directorydevice=/dev/rmt8 dd_noise='^[0-9]+\+[0-9]+ records (in|out)$' exec 3>&1 status=`((dd if=$device ibs=64k 2>&1 1>&3 3>&- 4>&-; echo $? >&4) | egrep -v "$dd_noise" 1>&2 3>&- 4>&-) 4>&1` exit $status;http://www.kiso.tsukuba.ac.jp/~makimura/text/node239.html 標準出力とエラー出力を別々のファイルに書き出し、画面にも表示したい。 htt

    リダイレクトの奥義 - メモ帳
  • NULL文字区切りに対応しているコマンド - 技術メモ帳

    http://ya.maya.st/d/200703c.html#s20070330_1 出力の順番をいじりたいからといって find | sort | xargs とかやってしまうと -print0 は使えない。ああ困ったねぇ。どうしようもないねぇ。 sort -z なんてオプションがあって、NULL文字も受け付けてくれますよ。 GNUのみっぽいですが。 find . -print0 | sort -z | xargs -0 cmd -- 他にも、ちょっと意味合いが違いますが grep -Z なんてものもあるみたいですね。 出力時にNULL区切りするという。

  • pgrepについて - 技術メモ帳

    no title なんだか grep のところに間違った記述がされているような気がします。 egrep,fgrep,pgrepはそれぞれ-E,-F,-Pが指定されたときと等価の処理を行う pgrep は、grep -P と等価な処理ではありません。 まったく別のコマンドでプロセスを検索するためのコマンドだと思います。 すくなくとも Linux系ディストリビューション においては。 そういえば、pgrep といえばボクの書いたウルトラわかりやすい記事が! pgrep, pkill を使用してプロセスを殺す - 技術メモ帳

  • 特定の所有者のファイルだけ所有者を変更 - 技術メモ帳

    今まで find と組み合わせてたのだけれども、 GNU chown だと --from というオプションがあることにさっき気づいた。 以下はカレントディレクトリ以下のファイルで 所有者が from_user:from_group なファイルのみ所有者を変更するためのコマンド。 -c オプションを付けて処理の様子を画面に出した方が良いかも。 $ chown -R --from=from_user:from_group to_user:to_group ./ 今までのやり方だと、だいたい以下のような感じ。 オプションとかは適当なのでおそらく動作しない。 最近マスコミで流行ってる、画面はイメージです メソッドを使用した。 $ find . -type f -user from_user:from_group | xargs chown to_user:to_group 実にどうでも良いが、マス

  • ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック

    GT Nitro: Car Game Drag Raceは、典型的なカーゲームではありません。これはスピード、パワー、スキル全開のカーレースゲームです。ブレーキは忘れて、これはドラッグレース、ベイビー!古典的なクラシックから未来的なビーストまで、最もクールで速い車とカーレースできます。スティックシフトをマスターし、ニトロを賢く使って競争を打ち破る必要があります。このカーレースゲームはそのリアルな物理学と素晴らしいグラフィックスであなたの心を爆発させます。これまでプレイしたことのないようなものです。 GT Nitroは、リフレックスとタイミングを試すカーレースゲームです。正しい瞬間にギアをシフトし、ガスを思い切り踏む必要があります。また、大物たちと競いつつ、車のチューニングとアップグレードも行わなければなりません。世界中で最高のドライバーと車とカーレースに挑むことになり、ドラッグレースの王冠

    ウノウラボ Unoh Labs: コマンドラインで作業する上で知っておくといいテクニック