Bye Bye Moore

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

bash

テキスト処理ツールm4はシェルスクリプトでテンプレートエンジン的に扱える

slimやjadeのようなテンプレートエンジンを使うとHTMLの一部を置き換えしたりできます。 シェルスクリプトでコレを実現する場合、私はいままでgrepだのsedだのawkだのをブンまわしていました。さて、ここで昔から使われいるテキスト処理ツールのm4が登場しま…

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

$ ./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ループで標準入力にきた結果を待ち構えている 標準入力には別の端末で生成された文字列を送り込みたい という課題を、これまで作ってきたモンの寄せ集めで作ってみましたという話 実際のところ 名前…

readコマンドで改行不要一文字のみで読み込む(あるいはbashでJOG機能的数値増減をやる方法)

実際のところ "-n"で文字数をきめる read -n 1 value キー入力を促す文字を入れ、結果を変数に格納する read -n 1 -p "Move (w/a/s/d q) :" key 実用例:JOG機能的 コントローラー等でユーザーがロボットを操作しながら位置調整したり検討したりする機能…

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$ [[ …

ptreeコマンドで親プロセスと子プロセスの関係表示

ptreeコマンドをつかうと、親プロセスと子プロセスの関係を表示できます。 実際のところ こんなの感じで、testExitの中でtestSubをよむというモンがあったとしあmす。 $ cat testExit.bash #! /bin/bash COUNT=0 function catchHup () { printf HUP } trap …

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のシェルパラメータ展開なら、これもいけます。 凄いな 実際のと…

dateコマンドで手動で時刻合わせ

cronを意図通りの時刻で動作させるためには正確な時刻設定が必要なわけですが、 ローカル運用RasPiなどでは手動で時刻合わせする必要があったりします。 一時的にネットを使って同期する方法もありますが、今回はベタにdateコマンドを使って設定してみます。…

作った関数が"/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に渡す関係で、…