Ubuntu 14.04 server用のROS一撃インストールシェルスクリプト

Pocket
LINEで送る

こういうものは世にたくさんあると思いますが、サーバ版のものはないかもしれません。ちゃんとケアします。

ryuichiueda/ros_setup_scripts_Ubuntu14.04_server

Pocket
LINEで送る

bashのpipefailで確実にスクリプトを止める

Pocket
LINEで送る

シェルプログラミング実用テクニック、出版される前からもう補足ですが、私めがbashのpipefailというオプションをすっかり見落としていたのでフォローしておきます。

本文ではbashに-e(エラーがあったら止める)をつけてもパイプラインの左側のコマンドにエラーがあったときに処理が止まらないと書きました。

例です。

続きを読む bashのpipefailで確実にスクリプトを止める

Pocket
LINEで送る

個人的現在の状況(ところでshellshockってshに失礼ではないか?)

Pocket
LINEで送る

生きてます!

ということで、現在こんな感じです。

  • bash製で表に出ているものは止めている。bashで環境変数に関数を仕込めるというのはバグではなくそういう実装だったということで、現在議論が続いているようなのでそれ待ち。
  • 早いうちにbashcmsのdash版(dashcms。笑)を作るすぐ作りました!)。bashに完全に依存してるのはPIPESTATUSの部分だけなので、時間を見つけて落ち着いてやれば一時間くらいでできるかなーというところ。時間を作る。

私が本当に欲しいものはコマンドやプロセス、ファイルを制御できるものなので、そういう意味ではbashにこだわる必要はないんですが、それでも便利なのとbashbash言って本まで出している手前ちゃんと良いところ悪いところを説明しないといかんなと考えております。

あとまあ、shの実体がbashのアレはもう少し様子見になるかと。

Pocket
LINEで送る

先程から騒ぎになっているbashの脆弱性について

Pocket
LINEで送る

確認しました(苦笑)

(追記: envを抜いてましたが、それだとCシェル系で確認できないので加えました)

ueda@remote:~$ env x='() { :;}; echo vulnerable' bash -c 'echo this is a test'
vulnerable
this is a test

続きを読む 先程から騒ぎになっているbashの脆弱性について

Pocket
LINEで送る

bashで中括弧のグループコマンドをパイプでつなぐとサブシェルで実行されるので一応気をつける

Pocket
LINEで送る

どうも。寝不足太郎上田です。細かい話が嫌いなのですが、調べる必要があり、調べたことを書きます。

{}で囲ったグループコマンドについてはシェルスクリプト本体と同じプロセスで動作するという記述がmanにあります。

ueda@remote:~$ man bash
...
       { list; }
              list is simply executed in the current shell environment.  
...

続きを読む bashで中括弧のグループコマンドをパイプでつなぐとサブシェルで実行されるので一応気をつける

Pocket
LINEで送る

bashで作ったTwitter投稿クライアントのコードをお掃除

Pocket
LINEで送る

とある事情があって整理して、ようやくちゃんとしたものができました。プロトコルとかエンコードとかをちゃんと押さえればライブラリに頼る必要はないんだよという例になっているかと。・・・別に頼ってもいいですが。

※追記:ACCESSTOKEN_SECRETは間違いです。ACCESS_TOKEN_SECRET で。最新のものは修正されています。

https://github.com/ryuichiueda/TomoTool/blob/222180b0913da4f5d77217e8eae530e74a46abc7/Twitter/usptomo-tweet

Pocket
LINEで送る

シェルの&&||パズル(解答編)

Pocket
LINEで送る

この前、ここで、次の四つのコマンド列の出力を当てるクイズを無責任に出題しましたが、ちゃんと真面目に解答します。

$ false && true || true && echo OK          <- 1
$ true && true || false || echo OK            <- 2
$ true || true || true && echo OK             <- 3
$ false && true || false || echo OK           <- 4

考え方

シェルも一応言語ですが、基本、コマンドを起動するための道具なので、上から下、左から右に順にコマンドを起動していきます。それで、「&&」も「||」も、左のコマンドの終了ステータスによって、右のコマンドを起動するかどうか決めるものですので、右側のコマンドが起動されるかどうかをまず考えます。例えば1の問題だと、最初の二つのコマンドは、falseが起動されてtrueが起動されません。

$ false (<-起動される) && true (<- 起動されない) || true && echo OK 

次に考えなければいけないのは、&&や||が見ている終了ステータスは、最後に起動したコマンドの終了ステータスだということです。ですから、1の問題では、次のように解釈できます。ですので、|| true のtrueは実行され、その次のecho も実行されます。

$ false (<-起動される) && true (<- 起動されない) || (<- falseの終了ステータス) true && echo OK 

これをおさえて左から右に慎重に考えて行けば、答えは特定できるかと思います。

$ false && true || true && echo OK
OK
$ true && true || false || echo OK
$ true || true || true && echo OK
OK
$ false && true || false || echo OK
OK

いかがだったでしょうか。しかし、可読性に重大な問題が発生するので、ぜひ使わないようにしていただきたく。

おしまい。

Pocket
LINEで送る

シェルの&&||パズル

Pocket
LINEで送る

問題です。シェル(bashを使用)で次のコマンド列をたたいたとき、「OK」と出るのはどれとどれでしょうか?

解説は後日。

$ false && true || true && echo OK          <- 1
$ true && true || false || echo OK            <- 2
$ true || true || true && echo OK             <- 3
$ false && true || false || echo OK           <- 4

Pocket
LINEで送る