Bye Bye Moore

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

bash

サブシェル内の実行結果をリダイレクトでファイルに飛ばす

$ ./mycmd > my.log みたいな事は普段シェルスクリプト書く人はご存知かと思います。 ここで、組み込みコマンドexecとサブシェルを使うとサブシェル中の実行結果をリダイレクトさせることが可能に・ 以下の例では、日付を出力した後mycmdを実行しそれをmylog…

curlの速度を制限する"limit-rate"オプション

妙に帯域が細かったり、あまり優先的でない処理を行う際、limit-rateオプション使うと速度制限ができます。 実際のところ 速度を1k/secに制限した状態で"http://foobar/download"からfile.extという名称でダウンロードするには $ curl -o file.ext --limit-r…

netcatの"-k"オプションと名前付きパイプを組み合わせる

shuzo-kino.hateblo.jp の続き的内容 netcatの"-k"オプションは読み取りを連続させるオプション これと名前付きパイプを組み合わせると、別プロセスで動いてる標準入力まちのコマンドに文字列を送り込む事が可能に 実際のところ 標準入力をループでまってるY…

PVコマンドで転送の進捗をだす

いくらお手製ツールでも、長時間掛かるような奴は進捗が見えないとさすがに不安になります。 pvコマンドを使うと、そのあたりの可視化が可能に。 実際のところ "-p"はアニメーションするプログレス表示、"-b"は転送済みバイト列。 $ nc -l 9999 | pv -pb > t…

atコマンドでCan't open /var/run/atd.pid to signal atd. No atd running?とか怒られたら……そもそもサービスを起動していないかも

指定日時にコマンドを実行してくれるatコマンドについての話題 実際のところ atコマンドを導入済みの新しい環境……というかWSLでatコマンドを実行しようとしたところ $ echo "pwd > dev.log" | at now warning: commands will be executed using /bin/sh job …

fswebcamの標準出力を明示的にPNG/JPEG化する

実際のところ fswebcamの標準出力は何もしないと以下のようにJPEGで出てきます。 Writing JPEG image to '-'. 受け手の都合でPNGにしておきたい場合、pngオプションが使えます。 引数は圧縮率で0~9を指定可能、-1にすると自動選択となります。 以下の例では…

fswebcamでpng画像をオーバーレイさせる

実際のところ 元画像を生成。 imagemagickのビルトイン画像であるroseをpng画像として保存 $ convert rose: rose_logo.png生成したPNG画像を"overlay"オプションにて使用 $ fswebcam -d /dev/video0 --overlay rose_logo.png --no-banner -結果はこんな塩梅に…

標準入力をwhileループで待ち受けるpython3スクリプトに名前付きパイプ越しに別の端末から文字列を送り付ける

なんだかクッソ長いタイトルですが……要は python3側はwhileループで標準入力にきた結果を待ち構えている 標準入力には別の端末で生成された文字列を送り込みたい という課題を、これまで作ってきたモンの寄せ集めで作ってみましたという話 実際のところ 名前…

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つができればとりあえず技術者合格というような文章を読んだことがあります。最近の作業で特定のトリガーを定期的に読みに行き、タイムアップになったら関数を終了する……というような処理が必要になった…

シェルパラメータ展開で文字列の大文字小文字をそろえる

地味に面倒な大文字小文字 パスワードなんかだと分離したほうがセキュリティ向上になりますが、なるたけ軽いデータにしたいとか、判定スクリプトの高速化したい場合は邪魔なんですよね。 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で見ないといけない状況が発生。 まずは装置と、手っ取り早く調達できて価格も安いロジ…