「Linux」カテゴリーアーカイブ

zsh の echo と bash の echo

まぁ、ご存じの方も多いと思うけど挙動が異なるので、注意。はまりました。

bash の echo コマンドはエスケープコントロールを出力できません。例えば、

echo -n "This is a Pen.¥¥rThat" ; echo

この出力は、 bash と zsh で異なります。もっとも echo は組み込みコマンドとしている場合も多いので、正常に動作する場合もあるかと思います。少なくとも私の環境では、 bash と zsh で動作が異なりました。

¥¥ r の部分が、「復帰」です。 echo の先頭にある -n は明示しない限り開業を行わないオプションです。最後の echo は改行のみを行います。私の意図している表示は、”This is a Pen.”を出力して後、先頭に戻って ( 復帰 )”That”を出力するというものです。その後に改行が行われますね。”This”の部分は”That”に上書きされて見えなくなります。つまり、”That is a Pen.”と出力されるはずなんですね。 bash だと「復帰」が動作しませんでした。

zsh では組み込みコマンドとなっているようですね。シェルスクリプトで zsh を明示しないで使ったら、「復帰」が機能せず悩んでしまいました。私が通常使っているのは zsh なので、シェルスクリプトでも明示すればよかったんですね。ついつい、 #!/bin/bash とか書いていました。 zsh をはっきり宣言してやれば、 zsh 組み込みの echo を使ってくれますので、こちらが意図したとおりの動作がきちんと行われます。

スクリプトからシェルを呼び出したりする場合にも、自分が普段使っている環境を明示してやることが必要ですね。そうじゃないと、私みたいにはまります。


知ったらしまい

相場格言

Kubuntu

openSUSE いいディストリビューションだったんですが、どうも私の環境では不具合が多く、解決できなかったのでさっさと別のディストリビューションに映ってしまいました。今度は Kubuntu です。

Kubuntu というと、 Ubuntu 系の KDE 版というような位置づけで考えています。 GENOME 版はどうも苦手でして、 KDE 版を選択したという感じです。基本は Ubuntu ですので、何よりトラブルに陥ったときの情報がたくさんあるのは安心感が違います。テスト的な考え方で運用していますので、 19.04 を選択しても良かったのですが、 LTS 版の 18.04 をインストールしてみました。

インストールに関しては、さすがは Ubuntu 系だけあって、ほとんどの部分が日本語で表示され、迷うことはありませんでした。日本語入力も、インストールが終了した段階で使えるようになっていて、問題ありません。まぁ、日本語入力に関してはあまり使う機会が無いかもしれません。 SSH 接続で Mac から使うことが多いですからね。

使い勝手もさすが Ubuntu 系。全く問題ありません。必要なアプリケーションをインストールして、少し運用してみましたが特に問題が出たものはありません。細かい設定はこれからですが、十分に使える状態になっています。


なぜあの時、俺を打って叱ってくれなかったのか。

イソップ

python のエラー

コピペして事を済まそうとする私が悪いんですけどね。 python 好きじゃないっす。

Raspberry Pi でスライドショーをするっていう話、先日したかと思うのですが、あまりうまくいってません。 Zero W 君のパワーが圧倒的に不足していることが原因なのですね。動画( MP4 )を再生させようと思っていたのですが、パワー不足でダメダメです。方向転換してトランジッションはなし。単純なスライドショーをしようとしましたが、いまいちでした。

そこで、ググってみたところ、良さそうな事例が載っていてソースコードも掲載されていたのでコピペでソースコードを持ってきました。私が考えていたのはランダムに表示させたいと言うことだったのですが、そのソースは順番に表示させるものでした。

それじゃ面白くないので、ソースコードの一部を変えてやろうと思ったわけです。まぁ、タイトルにもなっているとおり、ソースコードは python です。私は python をいじったことがありません。インデントの深さで意味が変わるんだ。ということぐらいしか知りませんでしたし、インデントの深さが括弧の代わりになるなんてとても信じられず、学ぶこともやめて頭の隅っこに置いていました。

エラー出るわけですよ。どこにも文法上のエラーなんぞ見当たらないのにエラー出るんですね。で、私の性格上、エラーコードとか見る前に「どこ間違ったかな?」とソースコードをのぞきに行きます。見当たらない。また実行する。エラーが出る。ちょこちょこ変えているうちに、元々のコードに戻したのにもかかわらずエラーが出るようになってしまいました。

どうなったんだ? お手上げ状態ですね。そこで初めてエラーを覗く。遅いですね。最初から見とけって言われそうですが、エラーを読んだのは切羽詰まってからでした。そこには …

TabError: inconsistent use of tabs and spaces in indentation

タブとスペースの一貫性のない使い方。とでも言うんでしょうか? これ見て、タブとスペースの混在が原因か? とピンときました。案の定、混在してましたよ。私はソースコードにはタブを使うのが決まりのようになっているんですが、コピペしたソースコードはタブではなく、スペースが使われていました。考えてみれば、 html の中にタブが入るのはほとんどありませんので、スペースですよね。

私が追記したりしたところにはタブが、元々のコードにはスペースが使われていました。そんなのもエラーとして吐き出すんですね。括弧使えばいいのに。こんな見えにくいものもエラーとしてしまう python は、やはり好きになれません(自分のことを棚に上げているのはもちろんです)。


平らな道でもつまずくことがある。人間の運命もそうしたものだ。神以外に誰も真実を知るものはないのだから。

チェーホフ

OpenSUSE Leap15.1 に再度変更

Tumbleweed を使っていたのですが、とにかく更新頻度が半端ない上、色々トラブルが出てしまったので、 OpenSUSE Leap( 安定版 ) に再度変更してみます。

Linux というと Ubuntu 系が有名ですし、情報量も多いのですが、 OpenSUSE を使ってみると非常にスマートですし、 Ubuntu 系には及ばないものの情報量もそれなりに多いので困りません。大変いいディストリビューションだと思います。

で、 OpenSUSE Tumbleweed という常時最新のテクノロジーを使っていくローリングアップデート方式を使っていました。これ、ローリングアップデート方式ですから仕方ないのですけど更新頻度が半端ありません。ほぼ毎日アップデートの案内が来ます。それもコアのアップデートも多く、リスタートを伴うものが数日に 1 度のペースで来ます。さすがにアップデート疲れという感じになりました。

OpenSUSE には Leap という安定版があります。普通に使えばこっちなんですね。 GENOME 版はどうも手に合わない感じがして Tumbleweed 版に変えた経緯があるんですね。そこで今回は KDE 版をインストール。これはいい感じですね。

しばらくこのまま使ってみます。

追記:なぜだか BOINC がインストールできません(インストールはできるけど起動するとエラーになります)。ソースからインストールしてみようかしら?


疑って安全を保つより信じて裏切られる方が良い

隆慶一郎