Bye Bye Moore

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

bash

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

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 -v udp-listen:96960,fork system:echo 参考もと socat を使うと各種ソケットの操作が捗りまくる件 | CUBE SUGAR STORAGE Linux Multipurpose Relay Socat Command Tutorial with Examples – POFTUT

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…

シェルで16進数の値を吐き出す

シェルで少量の16進数の値を出力したい場合、 特殊記法を使うといけます。 実際のところ $ echo -en "\x12" | od -x 0000000 0012 0000001みんな大好きprinfでもいけます。 $ printf "\x12" | od -x$ printf "\xde\xad\xbe\xef" | od -tx1 0000000 de ad be …

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 …

64bit系で32bitビルド前提のライブラリを使わんといけない場合、dpkgの"--add-architecture"オプションが使える……かも??

RasPi with Ubuntu Mateな環境でOpenCR環境を作ろうとしたときのこと。 libncurses5がないと言われ、ビルドが止まってしまいました。 これ、32bit系でのビルドの方が普及しているらしく ARM系でやってた私はデフォのaptだと導入できない事態に。 調べて見た…

sshpassをつかうとsshのパスワードを入力

$ sshpass Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters -f filename Take password to use from file -d number Use number as file descriptor for getting password -p password Provide password as argument (security unwise) -e Password …

GnuPGで暗号化

実際のところ 鍵の生成 対話型 完全対話型でつくるなら、 $ gpg --full-generate-key $ gpg --full-generate-key gpg (GnuPG) 2.2.17; Copyright (C) 2019 Free Software Foundation, Inc. This is free software: you are free to change and redistribute …

tput コマンドで端末表示情報を取得したり文字装飾したりするのは

tputコマンドは列や行などの端末表示情報を取得するコマンドです。 また、暗黒エスケープ文字無しに文字装飾をやったりもできます。 実際のところ 列の文字数は $ tput lines行の文字数は $ tput cols背景を緑(色番号2)に $ tput setab 2 参考もと man termi…

bashの行数や列数を出す

bashの内部変数を使う方法 $ echo $LINES 24 $ echo $COLUMNS 80tputを使う $ tput lines 24 $ tput cols 80

whiptailをつかってCLIに対話型画面をつくる その8:whiptail画面を関数に分離

#! /bin/bash function startBox { whiptail --msgbox "Welcome!!" 10 40 } function mainMenu { whiptail --title "Menu" --menu "choose an option" 12 40 4 \ "ONE" "option 1" \ "TWO" "option 2" \ 3>&1 1>&2 2>&3 } function case1 { whiptail --msgbo…

whiptailをつかってCLIに対話型画面をつくる その7:画面遷移してみる

#! /bin/bash RESULT=$(whiptail --title "Menu" --menu "choose an option" 12 40 4 "1" "" "2" "" "3" "" 3>&1 1>&2 2>&3) case $RESULT in 1) whiptail --msgbox "YES 1" 10 40 ;; 2) whiptail --msgbox "NO 2" 10 40 ;; *) echo "WtF...!?" esac 実際に…

whiptailをつかってCLIに対話型画面をつくる その6:シェルスクリプト上で値をうけとる

#! /bin/bash RESULT=$(whiptail --title "Menu" --menu "choose an option" 12 40 4 "1" "" "2" "" "3" "" 3>&1 1>&2 2>&3) if [ $RESULT -eq 1 ] || [ $RESULT -eq 2 ] then echo $RESULT else echo NONE fi case $RESULT in 1) echo "good case!!" ;; 2) …

whiptailをつかってCLIに対話型画面をつくる その5:Menu画面のサイズを画面に合わせて調整する

shuzo-kino.hateblo.jp の続きです。 Menu画面を作ったけど数値が毎回固定では使いづらいですね。 そういうときはBash自体の変数をつかいます。 実際のところ $ whiptail --title "Menu" --menu "Choose an option" $LINES $COLUMNS $(($LINES - 8)) \ "<-- …