min117の日記

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

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 半角カナを半角カナのままにする。

 

bash シェルからcurlで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を叩ける。ものっそい便利。もっと早くやっとけばよかった。