Bye Bye Moore

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

bash

bashの配列を連続で読みだしたり末尾に追加したり

実際のところ #!/bin/bash IP=localhost PORT=9999 CMDs=() CMDs+=("aaa\r" "bbb\r") CMDs+=("ccc\r") for e in ${CMDs[@]}; do printf ${e} | nc -w 0 $IP $PORT sleep 2 done CMDs=() CMDs+=("stop\r") for e in ${CMDs[@]}; do printf ${e} | nc -w 0 $IP…

netcatでTCP/IP ソケット通信

bashの特殊構文にIPとポート番号をディレクトリ様に書いて展開するdevがあるみたいですが…… 今回作業環境がWSLかつ今後何に移植するかもわからんのでnetcatを使いました 実際のところ 受け手 $ nc -lk localhost 9999 送り側 #!/bin/bash IP=localhost PORT=…

timeoutコマンドで一定時間たったらシグナルを送る処理を実装する

いままでシェルスクリプトのsleepとループでぶん回していましたが……coreutilの中に便利なコマンドがありました…… 実際のところ $ [[ $( timeout --signal=SIGHUP --kill-after=2s 2s /home/shuzo/testExit.bash > /home/shuzo/log.log ) ]] && echo none$ ca…

SIGWINCHで画面サイズが変更された場合を検知

実際のところ www.linuxcommand.org を写経し一部改造しつつ実験。 #!/bin/bash redraw() { local str width height length width=$(tput cols) height=$(tput lines) str="Width = $width Height = $height" length=${#str} clear tput cup $((height / 2))…

tputでCLIな端末をキレイにしたり動的に変わる画面を作ったりする

tputは端末に特殊文字を出すときに使ったりするコマンドです 色付けをしたりするのが有名どころかと これに仕込まれている特殊変数をつかって、疑似的に動的画面を作成できます ……なんか遠い昔、大学図書館のUNIX系の本でこれをつかったCLI画面テトリスを見…

WSL上でsixelな画像を端末で表示したいならwslttyを入れてみる

sixelは端末で画像を表示する便利機能です imvrやfehで飛ばすことをせずに確認できるすごい奴ですが……素のWSLは使えませんということで、WSLに接続するminttyのクライアントwslttyをブチ込んで試してみます 実際のところ 素のWSLだとこんな調子で文字列がで…

bash特殊変数SECONDS

bash特殊変数SECONDには、そのシェルが起動してからの秒数が記録される 実際のところ $ echo $SECONDS 2391 参考もと Bash Variables (Bash Reference Manual)

netcatでうけた文字列に対応した簡単コマンドサーバー

プロトコルもヘッタクレもなく、有線イーサネットでつながった装置二つで簡単コマンドサーバーを作りたく色々弄ったのでメモ。 実際のところ なんのことはなく、netcatの結果を変数に格納し、そのあとに処理をつなげる……だけ。 私は当初"-k"オプションもつけ…

bashのhistoryを消す

誰かに装置を引き渡すが、色々試行錯誤した後が残っていると格好悪い、あるいはそういうログから変な質問が飛んでくるのは避けたい……そういうときはhistoryの中身を消してしまうのも一手 実際のところ ログファイルをけす $ rm ~/.bash_history HISTSIZEをゼ…

bashのdouble bracket ([[ ]])で論理判定する

実際のところ こんなスクリプトがあったとします ~$ cat cmd1.bash #!/bin/bash printf $(basename $0) exit 0これを二重角カッコ内で判定すると、正は0、負は1を返します。 これに&&や||をつなげて処理を続けます。 $ [[ ./cmd1.bash ]] && echo 0 0$ [[ …

exitで渡すのは終了ステータスであってシグナル番号ではない

ちゃんと勉強した人なら当然なのでしょうが、私はちゃんと分かっていなかったのでメモ。shuzo-kino.hateblo.jp の補足的内容。 exitでは数字を渡して終了できるのですが……なんとなくシグナル番号を渡すもんだと勘違いしており $ cat testExit.bash #! /bin/b…

HUPシグナルをトリガーにしたスクリプトの再起動処理

再起動等の意味合いがあるシグナル ただ、機能をちゃんと作らないと普通の停止シグナルと同じ 実際のところ とりあえず使う 前回のスクリプトをベースにHUP(シグナル番号1)を捕まえる処理を書くとこんな感じに。 つかんだ処理を分かり易くするため、起動…

pkillはKILL以外にもシグナルを送る事ができる

実際のところ 実行権限をつけた、こんなファイルがあったとします。 $ cat testExit.bash #! /bin/bash COUNT=0 trap "printf '\n\r`basename $0` is closing.'" EXIT trap "printf '\n\r良夫ちゃんゴハンの時間ヨ\n'" 14 while true do COUNT=$((COUNT + 1)…

ブレース展開でバックアップファイル名を作ったり拡張子だけ変えるような処理を楽に書く

連続した数値の表記なんかで使える表現なのは知ってましたが、拡張子の展開にも応用できるとは知りませんでした。 実際のところ "{A,B}"のような記法で文字列の切り替えが可能。 バックアップファイル 過去設定を残したい場合なんかにbakを末尾につけたりし…

シェルスクリプトで再帰処理をやってみる

昔読んだ技術屋系読み物でSQL、正規表現、再帰処理の3つができればとりあえず技術者合格というような文章を読んだことがあります。最近の作業で特定のトリガーを定期的に読みに行き、タイムアップになったら関数を終了する……というような処理が必要になった…

作った関数が"/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コマンドを発見。 早速使ってみることに。 実際のと…