Bash, Shellscript, Testing Framework, Linux, ShellTL;DRtoromoti/chocomint.sh(github)数カ月前に超絶便利なBashのテストツール*1をリリースした。ジャンル的にはsstephenson/bats(github)やmpapis/tf(github)と同じようなもの。乱暴に言えば、この2つを掛け合わせたようなツール。動機Bashで書いたコマンドラインツールのテストのためになにかいいものはないかとツールを探したが、好みのものが見つからなかったから。使用感わざわざRubyなんてインストールしたくないし、もっと言えば実際に動くスクリプトのなかのコメント文にテストを書きたいというズボラな僕のためのツール。たとえば、あまり例としては良くないんですが、こういうスクリプトがあるとしたら #!/usr/bin/env choco
脆弱性は多くの一般的な設定でネットワークを介して悪用できるとされ、特にbashがシステムシェルとして設定されている場合は危険が大きい。 LinuxなどのUNIX系OSで標準的に使われているシェル「bash」に極めて重大な脆弱性が見つかり、9月24日に修正パッチが公開された。攻撃者がbashにコマンドを送って任意のコードを実行できる可能性が指摘されており、米セキュリティ機関のSANS Internet Storm Centerなどはパッチ適用を急ぐよう呼び掛けている。 関係各社のアドバイザリーによると、bashで特定の細工を施した環境変数を処理する方法に脆弱性が存在する。悪用された場合、攻撃者が環境制限をかわしてシェルコマンドを実行できてしまう恐れがあり、特定のサービスやアプリケーションでは、リモートの攻撃者が認証を経ることなく環境変数を提供することも可能になる。 この脆弱性は、多くの一般的
This article was originally published on the Red Hat Customer Portal. The information may no longer be current. Update 2014-09-30 19:30 UTC Questions have arisen around whether Red Hat products are vulnerable to CVE-2014-6277 and CVE-2014-6278. We have determined that RHSA-2014:1306, RHSA-2014:1311, and RHSA-2014:1312 successfully mitigate the vulnerability and no additional actions need to be ta
[twitter:@stillpedant](mooz)さん作のpercolはシェルとは独立しているのですが、ググるとzshと共に使っている人が多いようです。これはzshの強力な行編集機能を提供するzleに因るところが大きいためだと思います。 bashでもpercolを使っている人もいるのですが、 percolが便利だけど、入れるにはpython2系のほうが良さそう - About Digital Big Sky :: Windows のコマンドプロンプトを10倍便利にするコマンド「peco」 「絞り込んだパスへのcdを実行する」ことはできても、「絞り込んだパスを現在のコマンドライン行に挿入する」ことは実現できていない、つまりコマンド実行はできるけど行編集はできていないようでした。 そこで今回ちょっと調べてみたところ、bashでも(zleには及ばないにしても)変数READLINE_LINE
B! 39 0 0 0 シェルスクリプトを書いてる時に$@を使って ハマったのでそれについて。 $@と$* -fや-dの罠 まとめ $@と$* $@はシェルスクリプト 1 ではスクリプトや関数の中で全ての引数を表します。 $ f(){ echo $@;} $ f a b c a b c な感じ。 ここで、次の様なスクリプトを考えてみます。 atmark.sh 1 2 3 4 5 6 #!/usr/bin/env bash if [ "$@" != "" ];then echo "$@" else echo empty fi これを実行してみると $ ./atmark.sh a a $ ./atmark.sh ./atmark.sh: line 2: [: unary operator expected empty! $ ./atmark.sh a b ./atmark.sh: line 2
Docker, Immutable Infrastructure, Linux, Bash, Tool前段今日のタイトル怖い。この前、こんなの書いた。supervisordを使わずにコンテナ内で安全に複数のプロセスを走らせる - 技術野郎の復習このなかで、「コンテナ内の子プロセスを安全に止めるには親のSIGINTをトラップして、子プロセスを安全に殺してから親が死ねばいいじゃん。で、それやるんだったらsupervisordとかのプロセス管理ツール使えばいいけど、ちょっと大げさじゃね?」っていう話をした。*1ディスポーザブルなのに再起動supervisordとかmonitのやってくれるプロセス再起動がそんなにおいしいもんじゃなくね?って言ったのはあんまり深い意味はなくて、再起動してくれたら嬉しい場面もあるけど嬉しくない場面もあるし、ディスポーザブルって考えると死んじゃったらあっさり捨てて作りな
Docker, Bash 親はSIGINT、子はSIGKILLコンテナは基本的には One Work, One Container であるべきなんだけど、現状コンテナ内で複数のプロセスを走らせたいという状況はよくあると思う。Dockerコンテナ内で複数のプロセスを走らせるのなら、supervisordを使うと良いよっていうのは公式に書いてある。なんでかっていうと例えば、docker run -d centos multiexec.shとやってmultiexec.shの中で複数のプロセスをフォークさせていた場合、普通にdocker stopでコンテナを停止させると親プロセスにはSIGINTが送られるが、親プロセスの停止と同時に子プロセスはSIGKILLになるという動作になるからだ。 supervisordでプロセス管理…はやりすぎつまり、これでは子プロセスが安全に停止する猶予がないので、su
http://d.hatena.ne.jp/dharry/20101121/1290273723 とりあえずBash好きなので、前に覚えたことの復習も兼ねてもう一回書いておきます。 setでデバッグ ’-x’, ’-v’ デバッグは基本ですよね。オプションつけて実行するとスクリプトがストリーキングになります。 $ cat foo.sh for x in `seq 2`; do echo $x done $ bash -x foo.sh ++ seq 2 + echo 1 1 + echo 2 2 でもストリーキング愛好家の中には一部だけ露出したいという人もいます。そんなフェティシズムをお持ちでしたら内部で set をすれば OK です。 $ cat foo.sh [ ${1}x = "-dx" ] && \ set -x for x in `seq 2`; do echo $x done
yacc/lexとは Cでプログラミング言語の処理系を実装するのであれば、 多くの場合、yaccとlexというツールを使います。 実のところ、Cとyacc/lexで簡単なプログラミング言語を作る、というのは、 以前、「C言語ヨタ話 」で書いた「 電卓を作ってみよう」 の焼き直しになります。yaccとlexの説明もそちらに簡単に書いたので、 そちらを見てください――と言いたいところですが、 まあここでも軽く説明します。 内容的には重複、というかコピペしている部分もありますが。 プログラミング言語の処理系は、通常、以下のような手順を取ります。 字句解析 ソースプログラムを、「字句(トークン)」の並びに分割する処理です。 構文解析 トークンの並びから、解析木を構築する処理です。 この後、Cなどの機械語を吐くコンパイラや Javaのようなバイトコードを吐くコンパイラなら、 「コード生成」という処理
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く