[Ubuntu][Shell]Ubuntuの/bin/shでsourceコマンドが効かない件

virtualenv(wrapper)環境で動作するPythonスクリプトをcronで運用したくて 下記のようなシェルスクリプトを書いたのですが、

#!/bin/sh
export LANG=ja_JP.utf-8
export ENV_NAME=test
export VIRTUALENV_PATH=$HOME/.virtualenvs/$ENV_NAME
source $VIRTUALENV_PATH/bin/activate
cd $HOME/tmp/test
python ./hoge.py
exit

Ubuntuの場合、これがエラーとなる(確認したのは12.04と14.04)

hoge.sh: 5: hoge.sh: source: not found
Traceback (most recent call last):
  File "./hoge.py", line 2, in <module>
    from twython import Twython
ImportError: No module named twython

結論からいうとUbuntuの/bin/sh の実態はDashというシェルで、Dashには sourceコマンドがないようです。
※上記の場合、sourceでvirtualenvのactivateが出来ずに結果的にシステムのPythonが使われImportErrorを発生させた

$ls -l `which sh`
lrwxrwxrwx 1 root root 4  9月 21 22:27 /bin/sh -> dash

DashAsBinSh - Ubuntu Wikiによると "source"の代わりに"."を使えと。

上記スクリプトの場合、このようになります。

#!/bin/sh
export LANG=ja_JP.utf-8
export ENV_NAME=test
export VIRTUALENV_PATH=$HOME/.virtualenvs/$ENV_NAME
. $VIRTUALENV_PATH/bin/activate
cd $HOME/tmp/test
python ./hoge.py
exit

それかシェバングのsh を bash 等に替えちゃうとかですかね


Werkzeug の generate_hashed_password がストレッチングに対応していた(のを知らなかった件)

先日ふと Werkzeug のドキュメントを読み返していたら generate_hashed_ password がストレッチングに対応していることに気付きました。

対応されたのはいつからだろうと思い、リリースを調べたら Ver 0.9 (2013年6月) で追加されていますね(今は Ver0.9.6 )全然知らなかった(汗。。

まあ、気付かなかったのはライブラリをアップデートしても今までの文字列パターン( method$salt$hash )で使用出来ていたからですね(後方互換大事)。

このブログではパスワードハッシュに generate_hashed_ password で生成したものを使い、 check_password_hash で照合しています。とりあえずストレッチング仕様のパスワードハッシュに置き換えることにします( OS X 10.10.1 Python3.4.2 で確認)

In [1]: from werkzeug import generate_password_hash

In [2]: pw_hash = generate_password_hash('default')

In [3]: pw_hash
Out[3]: 'pbkdf2:sha1:1000$hldobvVq$cf3ea3d710ddf58609f0c8ee25630e70bca8fc76'

method$salt$hash が pbkdf2:method:iterations$salt$hash になっています。これがデフォルトのようです。
ちなみに照合はこうなります

In [4]: from werkzeug import check_password_hash

In [5]: check_password_hash(pw_hash, 'default')
Out[5]: True

In [6]: check_password_hash(pw_hash, 'defaultx')
Out[6]: False

ストレッチングについてはこちらが詳しいですね
本当は怖いパスワードの話(3/4) - @IT

ちなみに前回のエントリーはこちら
[Werkzeug][Flask]FlaskをSalted Passwordsに対応させる | aoshiman.org

Flaskのスニペット
Salted Passwords | Flask (A Python Microframework)


[Python][#shizuokapy] Shizuoka.py #4 に参加しました


image

Pythonについて、またそれ以外のことでも様々な驚きや発見、とある縁に驚いたこと、そしてよく笑った勉強会と懇親会でした。皆様ありがとうございました。

私の発表スライドを貼っておきます。

percolを紹介した時の反応は良かった。 @oec014 が言っていたように、皆こういうの好きですよね、動きがとにかくかっこいいんです。皆さん是非使ってみてください。あとは発表に入るくだりでのFirefoxプラグインへの食付きはよかった。Chrome版もあるそうなのでURL貼っておきます。

他の方々の発表で気になったのはやはり IPython Notebook ですね。これは来年の宿題です。 自分も使いこなしてみたいです。

Shizuoka.py 来年も是非やりましょう。個人的には三島とかが集まりやすそうなイメージをもってます。

P.S. 昨晩から今日にかけてFacebook MessengerやTwitterのDMでバンバンメッセージが届いています。モテ期に入ったんじゃないかと錯覚してしまいます(笑)メッセージ頂いた方々、20 日前後には発送出来ると思いますので暫しお待ちを


2014.12.16 追記
発表者のスライド一覧はこちら
追記ここまで

[less][percol]色付きlsをlessにパイプした時の文字化けの対応(ついでにpercolも)

タイトルで文字化けと書きましたが、正確には文字化けではなく、ターミナル上でカラー表示させる為の ANSI escape sequence が実際の色に変換されずに文字列そのものが表示されてしまうことです。

同じような現象の方がググってここにたどり着きやすくする為、便宜的にこの言葉を使いました。

例えば、ls --color や ls --color=always をless にパイプした時、次のようになります。

ESC[0mESC[34mdevESC[0m
ESC[34mdotfilesESC[0m
ESC[34mlocalESC[0m
ESC[34mpitfilesESC[0m
ESC[34mtmpESC[0m
ESC[34mダウンロードESC[0m
ESC[34mテンプレートESC[0m
ESC[34mデスクトップESC[0m
ESC[34mドキュメントESC[0m
ESC[34mビデオESC[0m
ESC[34mピクチャESC[0m
ESC[34mミュージックESC[0m
ESC[34m公開ESC[0m
(END)
これはデフォルト設定のlessが ANSI escape sequence を色として表示してくれないからです。

この現象を回避するいくつか方法の内、カラー表示させたい場合は

$ls --color | less -R
カラーじゃなくても ANSI escape sequence が表示されなければよいよ、という場合は
$ls --color=auto | less
sedを駆使したテクニック!
$ls --color | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]//g" | less

percolにパイプする場合はlessでいうところのRオプションがなさそうなので、カラー表示は出来なさそう。なので less --color=autoにするか、 作者様も言っているように sedでクリーニングするかでしょうか。

確認した環境

$uname -a
Linux ubuntu1404 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux

$less -V
less 458 (GNU regular expressions)

参照サイト


[GitHub]GitHubに非人間認定された話


20141108_01

昨日、何を血迷ったのか、26,000行程のテキストファイルをGist.vim経由でGistにアップロードしてしまい、写真にあるようなメッセージを喰らいました。。

One of our mostly harmless robots seems to think you are not a human. Because of that, it’s hidden your profile from the public. If you really are human, please contact support to have your profile reinstated. We promise we won’t require DNA proof of your humanity.

結構焦ったのですが、該当メッセージをググると、偉大なる先人たちの知見がインデックスされていました。

先人たちと同様にコンタクトフォームからプロファイルの復旧をお願いしました。2,3時間で復活するかな〜と見積もっていましたが、結局8時間程かかりました(16時にメールして、返信がきたのが0時くらいでした)。タイミングなんでしょうね。因みに返信メールはこのようなもの

Hi xxxx Sorry for the trouble! The robots have been known to be wrong once in a while. I've cleared your account, so everything should be back to normal. Your fellow human, Emily

以後気をつけます。


PAGE TOP