Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

bash

作った関数が"/usr/bin/bash: foobar: command not found"いうて怒られたら、exportで関数として認識させてやる必要があるかもしれない

端末上で関数を定義すると、単体でならそのまんま読みだす事ができます。 $ function foobar () { > echo $1 + $2 > } $ foobar 12 34 12 + 34ところが、paralell等々で読みだそうとすると動かないことが /usr/bin/bash: foobar: command not foundこういう…

シェルスクリプト中で"0042"みたいな形の文字列で格納されてる10進数の数値を取り出す

shuzo-kino.hateblo.jp でやった話題の発展。 シェルスクリプト中で"0042"みたいな形の文字列で格納されてる10進数の数値を取り出す方法について。 実際のところ こんな値があったとします。 $ FOOBAR="0042" $ echo $FOOBAR 0042API用のJSONに渡す関係で、…

GNU parallelコマンドで並列実行する

shuzo-kino.hateblo.jp と似たような話。 GNUのparalellコマンドは文字通り実行を並列にやるコマンドです。 本来の意図として、公式では以下のように説明されています。 GNU parallel is a shell tool for executing jobs in parallel using one or more com…

commコマンドで二つのファイルの共通項や違うトコを検出

diffコマンドとはちょっと異なる、比較用コマンド。 実際のところ 二つのファイルを比較するが、ソートされている事が前提。 こんなファイルがあったとして $ cat test1.txt 00 11 22 33 44 $ cat test2.txt 11 44 99まず、共通の物を出力するには"-12" $ co…

" if given arguments: "STREQUAL" "foobar" Unknown arguments specified"とか言われたら、大元の変数がないのかもしれない

実際のところ if given arguments: "STREQUAL" "3_1" Unknown arguments specified 何事かと思い調べたところ if( $ENV{UNITREE_SDK_VERSION} STREQUAL "3_1") の部分で警告が入った模様。このSTREQUALはSTRing EQUAL……という意味でif関数での比較で使ってい…

Ubuntu on RasPiに同じ種類のWEBカメラをつないで運用した時のメモ

RasPiに同じ種類のWEBカメラをつないで運用した時のメモ 実際のところ 環境 RasPi 4B Linux ubuntu-desktop 5.8.0-1024-raspi 複数の同じカメラ 複数の場所を一つのRasPiで見ないといけない状況が発生。 まずは装置と、手っ取り早く調達できて価格も安いロジ…

シェルコマンドのオプション”--”は「以降のオプションは無効」という意味かもしれない

bashで'--'を付けると、 それに続くオプションは無効となります。 実際のところ $ bash -c 'echo 123' 123ところがここで“--”をつけると $ bash -- -c 'echo 123' bash: -c: No such file or directoryと、後のオプションが無効化されます。オプションが無効…

stdbufコマンドでバッファリングを無効にする

バッファが埋まるなり解決してからでないと出力しないコマンドやプログラム、スクリプトは結構見かけます。 タイムアウト設定して閉じてくれればいいのですが、延々と受信待機しているのもあったりして難儀です。 この時、バッファリングしてるモンを適宜吐…

lddコマンドで実行ファイルの依存ライブラリをしらべる

CやC++で作ったプロジェクトだとsoファイルを読む込む関係から、lddコマンドという子を使って依存関係を調べる事ができます。 実際のところ $ ./example_walk ./example_walk: error while loading shared libraries: liblcm.so.1: cannot open shared objec…

bashのsleepコマンドはそんな厳密ではない(当然

高速で流れてくるワークだとかをカメラで判定するが、その時の時刻を可能な限り正確に……としたい人情はわかる。 わかるけど、Linuxの構造上そういう調整は根性据えてやらんといけない。 実際のところ 試しにカーネル他に全く細工をしていないUbuntu20LTS on …

Cronを数十秒ごとに実行したいがsleepを何行も書きたくない場合、forとseqを組み合わせるとワンライナー風にできてベネ

接続先装置の都合にあわせ、平日の日中に1分毎に実行すればいいスクリプトがありました。 ならcronでよかろうと、ササっと書いてお渡しし、半年ノートラブルで稼働しめでたしめでたし……だったらよかったのですが……色々あって、急遽実行回数を増やすことに。…

特殊変数"$$"でプロセスIDを読み込みファイルに退避させる

特殊変数"$$"でプロセスIDを読み込みファイルに退避させる方法について。 これでプロセスを明示して消す事が可能。 実際のところ ~$ cat test1.sh echo $$ while true do sleep 10 done$ sh test1.sh >> processID1.log & [1] 204やめるときはpkillの"-F"オ…

【読書メモ】シェルスクリプト+データベース活用テクニック―Bourne ShellとSQLiteによるDBシステム構築のすすめ

シェルスクリプト+データベース活用テクニック―Bourne ShellとSQLiteによるDBシステム構築のすすめ作者:雄二, 広瀬カットシステムAmazon結構前から、システムを作るときにはシェルスクリプト on Bashな構成で作っています。 保存はファイルにやってたのです…

printf(1)の"-v"オプションで生成文字列を変数に格納する

実際のところ 今までは、こんな感じで変数の代入で式展開というようなアクロバットな事をしていました。 $ OURVAL=`printf "%x" 254` $ echo $OURVAL feこれが、"-v"オプションでこう書けます。 $ printf -v OURVAL "%x" 255 $ echo $OURVAL ff 参考もと Con…

foldコマンドで数文字毎に折りたたむ

ソレなりに長い16進数ダンプの文字列があって、それを4バイトごとに折り返して格納する必要がでてきました。 awkでやろうかとも思いましたが、そういうコマンドがあるんじゃないかと調べたところ……foldコマンドを発見。 早速使ってみることに。 実際のと…

ヒアドキュメント中で16進数として格納された文字列を10進数にパースし格納する

ヒアドキュメントとtrで長めな文字列を成形 - Bye Bye Moore と bash内の算術置換で16進数の数値をつかう - Bye Bye Moore の発展的話題。 実際のところ NetcatでUDPでウケたデータをhexdumpでベタ文字列にし、それをパースする例。Bashの基数記法を使って、…

ヒアドキュメントとtrで長めな文字列を成形

実際のところ $ tr -d '\n' << EOF 12 34 EOF 1234 応用すると、目視し辛いデータの可視性が多少マシになる。 速度は落ちるかもしれないが……。 $ VAL_C=$(tr -d '\n' << EOF 12 34 EOF ) $ echo $VAL_C 1234 bashの16進数記法もパース可能 $ DATACMD="$(tr -…

Debian標準添付の対話型CLIツール「whiptail」の事例をしらべる

設定画面とかは気を回せばいくらでも丁寧に作成可能ですが、 自分で使うツールに手を掛けすぎてもコストが回収できませんよね。 とはいえ、設定ファイル単体駆動みたいな構成にすると後が死ぬし……。 こういう時、ちょっとした対話型インターフェイスがあると…

シェル関数statでファイルの情報を取得

実際のところ シンプルな読み出しでは各種情報が出てくる。 $ stat tk-test2.py File: tk-test2.py Size: 2591 Blocks: 8 IO Block: 4096 通常ファイル Device: b307h/45831d Inode: 134198 Links: 1 Access: (0777/-rwxrwxrwx) Uid: ( 1000/ pi) Gid: ( 100…

シェル関数uptimeでシステムの起動時間を知る

uptime関数はシステムがどの程度起動しているかを調べられる関数です。 実際のところ $ uptime 00:34:25 up 2:21, 3 users, load average: 0.12, 0.12, 0.09"-s"をつけると、起動した時間が”yyyy-mm-dd HH:MM:SS”の形式で出てきます。 $ uptime -s 2021-01-1…

dateコマンドでUNIX秒+ミリ秒な文字列を生成する

$ date +%sとすればUNIX時間の秒表記がでてきます。 が、連携先がGPSなど秒より細かい刻みで動いてるデータの場合、ミリ秒の単位があると嬉しかったりすることも。 実際のところ 揃えればいい時 なら、とりあえず1000倍……というか、末尾にゼロ3個。 $ date …

curlコマンドのヘッダーの要素を追加

shuzo-kino.hateblo.jp の続きめいた話。JSONをポストする際、ヘッダ部分にAPPKEYを入れる仕様に対応したとき。 実際のところ ファイル”YOURKEY”に記載された内容をリクエストヘッダのYourKeyに渡して使うには以下のように。 $ curl -X POST -H "Content-Typ…

curlコマンドのデータペイロードに標準入力をつなぐ

みんな大好きパイプ処理。 小分けに作成できて、僕は好きです。 さて、今回はそんなパイプ芸をCurlでも使う方法をば。 標準入出力は"-"で表現される事が多いですが、このCurlでもそんなノリ"@-"で使えます。 実際のところで echoで出力したJSONをCurlのデー…

"-bash: 警告: command substitution: ignored null byte in input"について

"-bash: 警告: command substitution: ignored null byte in input"について。 bash4.4から導入された警告文らしい。 実際のところ 例のごとくバイト列遊びをしていた時の事。 netcatでうけた文字列をhexdumpで表示しようとしたら、以下のような警告文が。 $…

bash環境下で”$ echo *とやったら現在のディレクトリが表示された話

未開蛮族なので”$ echo *”でlsっぽい出力でるの知らなかった— 木野修造@零細事業主 (@shuzo_kino) January 7, 2021 これなら、ただの便利コマンドやん……で終わるのですが。 echoのインライン実行でこれを知らないと面食らうかも。 というか私はギョッとしま…

"/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のとき当日)があります。 秒はないようです。 あっても、そんな変…