読者です 読者をやめる 読者になる 読者になる

min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

bash bannerコマンドでシェル画面に文字列を出すスクリプト(文字列Xamarinを出力)

bash Mac Windows Xamarin

 

ツイッターで見かけたこの記事。感動した。bashを使って画面に縦文字を書く「banner」コマンドの出力を、横にするワンライナー

f:id:min117:20160924205842p:plain

天才は居るもんだ。bash最高。awk最高。速攻で試してみる。

banner -w 40 'Use Xamarin' | tr '# ' '+-' | awk '{printf $0;if(length<40)for(i=length;40-i>0;i++)printf "-";print ""}' | awk '{for(i=1;i<=NF;i++)a[NR,i]=$i}END{for(j=1;j<=NF;j++){for(i=1;i<=NR;i++){printf a[i,j]}print ""}}' FS= | tail -r | tr '+- ' "# " | sed 's/ *s//'

f:id:min117:20160924210211p:plain

マジか。できた。ちょと本気感動した。文字列引数にして好きなの出せるようにするスクリプトにする。

$ vim bannerXamarin.sh

f:id:min117:20160924210647p:plain

実行してみる。

$ ./bannerXamarin.sh 'I LOVE Xamarin!!!'

f:id:min117:20160924211046p:plain

$ ./bannerXamarin.sh 'Now Trying Xamarin!!!'

f:id:min117:20160924211122p:plain

やばいなこれ。MacBook Proに取ってある予算、Windows機に使っちまいそうだ…

Mac HDDの容量不足のときは「写真」ライブラリを外付けに移行して解消する

容量不足 Mac

 

macOS Sierra になってから、Macのストレージの管理がしやすくなった。容量を食ってるファイルを確認できる。

ーーー

「このMacについて」から

f:id:min117:20160923062743p:plain

上のメニューから「ストレージ」を選んで「管理」を押すと…

f:id:min117:20160923062755p:plain

HDDを分析して容量の大きいものをピックアップしてくれる。ファイルだけなじゃく、フォルダまで対象になるのが良い。

f:id:min117:20160923062802p:plain

Yosemiteのときにできた「写真ライブラリ」アプリが大量にストレージを食ってた。ローカルに全ファイルをコピーして持つ仕組みだからみたい。これを外付けHDDに逃がす。良い記事をみつけた。

chalibrary.link

手順としては3つらしい。

①「写真Library」データを外付けHDDに逃がす

② Optionキーを押しながら「写真」アプリを起動する→ライブラリを選択

③ 写真アプリ→環境設定→「システムフォトライブラリとして使用」

ーーー

まずは①「写真Library」のデータを丸ごと外付けHDDに逃がす。記事ではFinderからコピーでやってるけど、面倒なのでコマンドで、しかも移動でやる。

$ cd /User/ユーザ名/Pictures

$ mv 写真ライブラリ.photoslibrary/ /Volumes/外付けHDD名/

f:id:min117:20160923064022p:plain

ーーー

次に② Macのキーボードの Optionキーを押しながら「写真」アプリを起動する。

f:id:min117:20160923064553p:plain

「写真ライブラリ.photoslibrary」というフォルダが見つからない て感じの注意メッセージが出た。移動したんだから当然。「ほかを開く」から選び直せばいい。

f:id:min117:20160923064800p:plain

「その他のライブラリ」から、外付けに逃した「写真ライブラリ」を選択してやる。

f:id:min117:20160923064808p:plain

f:id:min117:20160923065050p:plain

写真アプリで読み込みが始まる。

f:id:min117:20160923065120p:plain

ーーー

最後に③ 「システムフォトライブラリとして使用」を行う。

写真アプリの「環境設定」を開くと

f:id:min117:20160923065426p:plain

"写真"のiCloud機能は…と意味不明なメッセージがでるが、無視。左上の「一般」を選ぶ。

f:id:min117:20160923065450p:plain

「システムフォトライブラリとして使用」があるので押す。

f:id:min117:20160923065553p:plain

「システムフォトライブラリとして使用」がグレーアウトすれば完了。

f:id:min117:20160923065616p:plain

ーーー

そもそも、この「写真」アプリって好きになれない。名前が「写真」なんて、一般的すぎるからGoogleに引っかからないし、ローカルに写真全部をコピーして持つ仕様も(ストレージばっか食って)どうかと思う。ジョブズならこんな作りにしなかったんじゃないの?と。

 

 

 

Mac テキスト読み上げ音声「Otoya」「Kyoko」を削除するには /System/Library/Speech/Voices から消す(macOS Sierra)

Mac 容量不足

 

Macのディスク容量が不足している。空き不足でアプリケーションのインストールに失敗する状況。以前、テキスト読み上げさせたくて音声ファイル「Otoya」とか「Kyoko」をダウンロードしたけど、これが相当容量を食っているらしい。

ーーー

このテキスト読み上げ音声「Otoya」「Kyoko」を削除するには、/System/Library/Speech/Voices/ から削除すればいい(2016/9/22時点。macOS Sierraにて確認)。

$ cd /System/Library/Speech/Voices/

f:id:min117:20160922055446p:plain

Otoya なんぞ要らん。消す。

f:id:min117:20160922055801p:plain

du -s でVoiceフォルダの容量を見ると、1.2GBだったのが865MBに減った。「Otoya」の音声だけで400MB近く取ってたのか。こういう無駄なファイルをUIで消せないのはMacにしては失敗だと思う。

ーーー

同様に「Kyoko」の音声も消す。

f:id:min117:20160922060147p:plain

消す前のdf。空き容量(Avail)は13GB。

f:id:min117:20160922060223p:plain

消した後のdf。空き容量は14GBになった。Kyoko 容量食い過ぎ。

f:id:min117:20160922060332p:plain

 

 

bash radiko参加局一覧から、参加局のID(識別子)だけを抜き出す

bash ラジオ

 

前記事の続き。

RaspberryPi 3 でradiko受信してテレビ画面でラジオを聞く - min117の日記

radikoの参加曲一覧を掲載したサイトが以下にあり。

radikomemo - foltia - Trac

f:id:min117:20160910174036p:plain

Linuxradikoを再生する時には、ここからradiko.shをダウンロードして、

# sudo wget https://gist.githubusercontent.com/soramugi/836952a6b09e540eb6a3/raw/81182ff0a1f5003077a479e0e947b66fb5d3b99e/radiko.sh

引数として、-p(再生モード)を指定し、さらに上記一覧の最右列にあるID(識別子)を与えて実行すればいい。例えばラジオNIKKEI第1放送の再生なら

$ ./radiko.sh -p RN1

とするだけ。ここまでは前回の話。

ーーー

今回は、上記一覧からID(識別子)だけを取り出したい。一覧をtxtにコピペして、空白を全てカンマ区切りにしたのが以下「radiko参加局一覧.txt」

f:id:min117:20160910174729p:plain

ここから、カンマ区切り最右フィールド「RN1、RN2…」だけを取り出す。awksed使えば一発でできる。

$ cat radiko参加局一覧.txt | awk -F, '{print $3}' | sed '/^$/d'

sed で空白行を消してるのがミソ。^$ は空白行をつかまえる。d でdeleteしてる。

ーーー

取り出した結果。

f:id:min117:20160910175348p:plain

そのテキスト

ID(識別子)
RN1
RN2
HBC
STV
AIR-G
IBC
TBC
FBC
TBS
QRR
LFR
Inter
TOKYO
FMJ
IBS
JORF
BERRY
BAYFM78
NACK5
YFM
FMGUNMA
BSN
NIIGATA
PORT
KNB
FMTOYAMA
ABC
MBS
OBC
FM
802
FM
FM滋賀
KBS
FM京都
FM
CBC
GBS
ZIP-FM
CUBE
AICHI
HFM
RKB
KBC
FM
FUKUOKA
SBS
SHIZUOKA
SBC
FMN
MRO
MBC
FBC
BSS
RNB
NBC
FMNAGASAKI
RKK
FMK
OBS
FM_OITA
MRT

ーーー

awksed。最高だ。

 

bash タスクの実行状況確認(ps aux をカスタマイズ/ワンライナーで)

bash ラジオ

 

bashでラジオの録音スクリプトを組んだ。rtmpdumpで録音して、ffmpegでmp3にする。実行状況をモニタリングしたい。使い捨てのワンライナー

for i in `seq 1 10000`; do if "$i" -le 10000 ; then ls; ps aux | egrep 'rtmp | ffmpeg'; echo "$i"; sleep 2; clear; fi; donelea

f:id:min117:20160910161156p:plain

sleep 2 のあとにclearで画面更新を入れてるのがミソ。if文は要らないのかもしれないけど、一応。

実行結果

2秒ごとに更新される。

f:id:min117:20160910160635p:plain

www-data(実行者)の横にある11547(PID)が刻々と変わるのと、左下の17(カウント回数)が1ずつあがっていくので、実行されているのが分かる。

 

 

bash シェルからcurlでPHPを叩く

bash Linux PHP

 

fedoraサーバにあるrecHTTP.phpファイルにGETで引数を投げてやると、「録画プロセスrecpt1が起動しているか」を判定して返すようにしてある。

いつもはブラウザから実行してた。

f:id:min117:20160907233855p:plain

これを、RaspberryPiやMacのシェル(bash)上からコマンド実行できるようにしたい。curlで出来るかなと思って調べたら、ものすごい簡単にできた。

$ url="http://192.168.1.1/phpファイル名?引数

$ curl $url

これだけ。スクリプトにしてみる。

bashからPHPを叩くスクリプト

f:id:min117:20160907234047p:plain

これで、例えばMacのローカルでスクリプト実行すれば、fedoraサーバ上のphpを叩ける。ものっそい便利。もっと早くやっとけばよかった。

bash Linuxシェルと同じことをWindowsバッチでやる

bash Linux Windows バッチ

 

Linuxシェルは毎日の生活になっているので普通に使ってたけど、ここにきて仕事でWindowsバッチを書くことが多くなった。両方で同じことをしたい。

ーーー

今いるフォルダの一覧を取得する(lsと同じ)を、bashWindowsバッチと両方でやってみる。

Linux bashの場合(ls.sh)

$ for i in *; do echo "$i"; done

Windows バッチの場合(ls.bat)

for /F %i in ('dir /b') do @echo %i

f:id:min117:20160907230054p:plain

バッチの中で正規表現も使えたりする。

Linux

$ for i in *{txt,log,sql}; do echo "$i"; done

Windows

for /F %i in ('dir /b ^| findstr /r ".*txt | .*log | .*sql"') do @echo %i

注意点

 バッチのdir /b をパイプしてfindstrに渡すときは、パイプの前にキャレット^が必要らしい。しかしfindstr /r の引数にくる文字列の中で(orの意味で)パイプを使うときはキャレットは不要

f:id:min117:20160907231028p:plain

サラッと書いて動くのはいいけど、やっぱDOSバッチには限界がある。PowerShellで書くとさらに面倒で、どうしたってワンライナーって気にはならない。Linux版のPowerShellなんてのも出始めたようだけど、そんなの使うよりはbash使うよね…

ーーー

おまけ

 Windowsで書いたShift-JISなbatファイルをLinuxで開くと文字化けする。Shift-JISをUTF8に変換する一番確実なnkfのオプションは「-wLux」。

$ cat win.bat | nkf -wLux

-w UTF8にする

-Lu 改行をLinuxのもの(LF)に統一する

-x 半角カナを半角カナのままにする。