Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

bash

"/dev/udp"をつかう

実際のところ netcatだと echo "something" | nc -u -w0 127.0.0.1 8125これがbashの場合、 echo "something" >/dev/udp/127.0.0.1/8125 echo "$*1" > /dev/udp/lights.climagic.com/45444 # Send a random number 1-9 over UDP to https://t.co/2ECImTvDRH …

パイプで繋いだwhile構文の条件にreadコマンドを使うと、すこし複雑な文字列を先に生成してから処理できる

パイプで繋いだwhile構文の条件にreadコマンドを使うと、すこし複雑な文字列を先に生成してから処理できる 実際のところ なんのこっちゃと思うので、実例を一つ。yes "$(seq 231 -1 16)" | while read i; do printf "\x1b[48;5;${i}m\n"; sleep .02; done # …

シェルスクリプトの変数は持ち越されるので作り捨てでも名前は分けましょうという話

シェルスクリプトは書くの楽なので、私はついつい書き捨てのモンを量産してしまいます 今日、それぞれ別の件で作ったモンを一つのボードに入れたところ、なぜか動かず。 原因をしらべたところ、RasPiのボタン状況をとる変数が共通していていたのが原因でした…

Waveshare社OV5648USBカメラをつかう その4:GPIOをトリガーにして撮影してみる

実際のところ BCM2とGNDにそれぞれ線をつなぐ。 操作スクリプトの”button.sh”はこんな塩梅。 #!/bin/bash while : do if [ $(gpio -g read 2) == 0 ]; then fswebcam -r 1920x1080 -S 12 -F 1 image/$(date -Iseconds).png fi printf "." sleep 0.5 doneこの…

findで直近30分の間で更新されたファイルをさがす

"mmin"オプション使うといけます 実際のところ ”.log”の拡張子をもつファイルのうち、直近30分で更新されたものを探すには $ find . -name "*.log" -mmin +30 -print日数ならmtime(ただし0のとき当日)があります。 秒はないようです。 あっても、そんな変…

bashで少しだけ違うコマンドを楽に入力する

実際のところ こんなコマンドがあるとします。 $ echo some someこれの入力を"Rome"にしたいなら、こんな記法で臨みの結果が得られます。 $ !!:s/s/R/ 2>/dev/null echo some Romeデフォだとhistroy番号から実行するやつ(!NUM)と同じようにエラー出力に実…

FINSコマンドの終了コードで90とか出たら、アドレスが逆かも

あまりにマニアックすぎるネタですが、今後のためにメモ。OMRON製PLCと通信するときに使うFINSコマンドで 終了コードで90とか出たら、アドレスが逆かも……という話。これは、ネットワーク異常を示す先頭ビットが立った状態で、 かつパケット不正を示すメイン1…

hexパケットを吐き出すUDPサーバーにnetcatで通信し帰ってきたhexをみる

前の記事でやった変数格納を使って hexパケットを吐き出すUDPサーバーにnetcatで通信し帰ってきたhexをみる方法を実験しています。 実際のところ YOURPACKETにhexの値を投入しときます。 これをprintfで標準出力に出し、netcatのタイムアウト設定付きで受け…

printfで別プロセスで作った特殊記法の16進数文字を出力する

printfで別プロセスで作った特殊記法の16進数文字を出力する方法 ……上手い言い方を知らないので周りくどい表現ですが 変数に格納してインライン展開という方法が今の私の精一杯でs(白目 実際のところ まず、以前の記事で調べたように文字列中に特殊記法な…

シェルスクリプトで一定秒まつ

sleepだったかwaitだったかdelayだったか毎回忘れるのですが シェルスクリプトは秒1秒まつのは sleep 10.2秒なら $ sleep 0.2 参考もと man sleep

nohupコマンドでログアウト後もバックグラウンドでコマンドが実行されるようにする。

nohupはN0 HungUpの略で、その名の通りhung upシグナルの影響を抑えてコマンドを実行できるやつです。 実際のところ X Window越しでRasPiのGUIを起動する - Bye Bye Mooreで以下のようなコマンドを叩きましたが $ nohup arduino &これだとarduinoコマンドを…

socatで作ったサーバーに一個毎にデータを送る

socatで作ったサーバーにデータを送る方法です。 なんも考えないでnetcatで送信、コネクションが切れず終わらない 実際のところ サーバー ベタに、パケットを受け取って、USBポートにつないだシリアルデバイスにパケットを流す構成です。 $ socat TCP4-LISTE…

WiringPiのシェルコマンド 群 HIGH/LOWの読み書き

以前、つよいインターフェイスをもつ RasPi拡張ionoPiには、専用のシェルコマンド群があることを紹介しました。 Iono PiのI/Oをいじる その2:シェルからI/Oに手をつっこむ - Bye Bye Moore散々っぱら使っておいて今更気づいたのですが、wiringPiでも読み書…

シェルスクリプトの関数の引数として文字列をわたすと行頭スペースが勝手にパースされたりする件

……printfやechoで、行頭のスペースが消されて見えなくなるというあれが。 スクリプトの方はちゃんと整形していても、出力でお節介されたらたまりません。shunit2でテストをやろうとした時、先頭にスペースがあって然るべき文字列として渡しても、 スペースを…

ビッグエンディアンで数バイト格納されているデータをsedやawk でパースする

ビッグエンディアンで2バイト、1バイト、1バイトと格納されている文字列が来ていたとします。 こいつをリトルエンディアンで置き換えるには先頭だけ入れ替えてあげればいいですね。 $ echo AD7399AF | sed -e "s/\([1-9A-F]\{2\}\)\([1-9A-F]\{2\}\)\(.*\…

ddコマンドでNULL(0x00)埋めデータをつくる

実際のところ 100バイトのファイルを生成する場合は以下のように。 bsがバイト数、countが繰り返しで、出力を指定するifが0x00を延々と出力する/dev/nullなので 期待した出力が得られます。 dd bs=100 count=1 if=/dev/zero of=file1ためしにhexdumpで見ると…

sedで複数行にまたぐ処理をしたい時、パターンマッチ併用でやや複雑な事ができる。

shuzo-kino.hateblo.jp の発展です。 実際のところ こんなファイルがあったとします。 $ cat sample.txt This is my dog, whose name is Frank. This is my fish, whose name is George. This is my goat, whose name is Adam.ここで、dogが含まれる行だけ改…

xxdコマンドで16進数な値をパースする

xxdコマンドはvim内部で使われる16進数をよろしくパースするツールです。 hexdumpやodに似ていますが、オプションの使い方によっては高速になる事もあります。 実際のところ $ seq 1 10 | xxd -p -u 310A320A330A340A350A360A370A380A390A31300A 来たまんま…

socatコマンドでシステム関数をつかう

シェルでsocatコマンドが使えるなら、パイプで繋いでヤーヤーやりたいのが人情というもの。 そういう場合、"system"オプションを使うことでシステム関数(シェルコマンドとか)を利用することが可能です。 実際のところ $ socat -v udp-listen:96960,fork syst…

socatコマンドでリモート先にTCPで通信する

サーボにせよセンサーにせよ、だんだんとEthanet対応の機器が増えてます。 こういうのに繋ぐツールとしてはnetcat/ncコマンドがありますね。 これの上位版……というか、高機能版としてsocatというのもあります。 実際のところ デフォ設定のまま192.168.1.31:5…

PermissionError: [Errno 13] Permission denied: '/dev/ttyACM0'とか怒られたら

Pythonでシリアルポートを開こうとしたところ、以下のようなエラーが。 >>> ser = serial.Serial('/dev/ttyACM0', 57600) Traceback (most recent call last): File "/home/hoge/anaconda3/lib/python3.7/site-packages/serial/serialposix.py", line 265, i…

bashで前に実行したコマンドの引数を一部置き換えて再実行したい

前に実行したコマンドを、引数だけ変えてもう一回やりたい事とか、ありますよね。 パッケージの連続導入とか、パラメータをズラした再計算とか。 Bashには、そういった願いを叶えるアレな記法があります。 実際のところ $ echo 123 123 $ ^123^456^ echo 456…

bashで標準出力に16進数の値を吐き出す

bashで少量の16進数(HEX)の値を出力したい場合、 bashの場合文字列中で特殊記法を使うといけます。 実際のところ $ echo -en "\x12" | od -x 0000000 0012 0000001みんな大好きprinfでもいけます。 $ printf "\x12" | od -x 0000000 0012 0000001$ printf "\…

bash内の算術置換で16進数の数値をつかう

bashの組み込み変数をつかうと、算術置換の際に16進数を展開して使うことができます。 シリアル経由でHEX値がきて、それを受信して使いたい時なんかは有効ですね。 実際のところ $ echo $((16#BC + 1)) 189HEX値を渡すことも可能。 $ echo $((0xA + 1)) 11 …

bashでhistory番号をみる

historyコマンドの履歴をたどると前に実行したやつを再実行できたりします。 今回はその番号を見る方法です。 実際のところ $ echo $HISTCMD 513計算もできます。 $ expr $HISTCMD - 24 505 $ echo $(($HISTCMD+5)) 542 コマンド置換(Command Substitution)…

sh/bashコマンドの"-c"をつけると文字列を実行できる。

実際のところ 普通に文字列を渡す $ bash -c "echo 12" 12 $ sh -c "echo 12" 12 ファイルから読んでみる $ cat samplecode.txt echo 134 $ sh -c "`cat samplecode.txt`" 134これは普通のshコマンドつなぎと結果は同じです。 $ sh < samplecode.txt 134 $ c…

sshのリモートコマンドにローカルファイルを渡して実行したい

ホストOSで得られた画像だとか計算結果をリモートOSに渡して計算してもらう方法です。 私の例ですと、手元で計算した結果をリモートOSでちょっと加工して周辺装置に飛ばす構成でつかいました。 実際のところ ホストのローカルにある123.txtを、 VirtualBoxの…

VirtualBoxのゲストOSにホストOSからSSHでログインする(ホストIP設定編)

このネタ何度目やねんって話ですが……またぞろうまくいかなかったので、メモ。 実際のところ VirtualBoxの設定 起動していない状態で、インスタンスの設定からネットワークにとび ポートフォワーディングで、ホストIPをローカルホスト、ホストポートを2222と…

odで数バイト分読みをスキップしたい場合

odで数バイト分読みをスキップしたい場合は"j"オプションがあります。 あらかじめ全部読んで必要部だけ引っ張るのがシェル流でしょうが、 少しでも不可減らしたいときは結構有効だったり。 実際のところ $ printf "0123" | od -j 0 0000000 030460 031462 00…

odコマンドで一行でだす

odコマンドはデフォだと、行番号まで出てきて何かしら細工をしたい場合使いづらいです。 今回は、これを一行で出す方法。 実際のところ $ echo 123 | od -An -v 031061 005063 16進数は"x" $ echo 123 | od -An -v -tx1 31 32 33 0a $ echo 123 | od -An -v …