Twitterをボケーッと眺めていたところ、xargsで呼び出したコマンドにキー入力をしたいという内容があったので、どうやったらできるのか調べてみた。

通常、対象のプロセスで標準入力が開いてないとだいたいの(というか、普通の)コマンドは処理を待たずに終了してしまう。なので、なんとかしてターミナルを標準入力として渡してやればいいということになる。

1. /dev/ttyを読み込ませる

以下のように、/dev/ttyをxargsで呼び出したコマンド内部で読み込ませる事で、ターミナルの入力を渡すことができる。


Twitterで、ジャンプの短期連載の単行本だけを集めた本棚の写真を見かけたので、こういった短期連載作品群のリストを作れないかなーと思ってちょっと調べてみた。

で、そういったマンガの単行本のDB的なの無いかなー…と思って調べてたところ、文化庁が2015年に『メディア芸術データベース』なるものを出していた。みてる限りまだ開発版であること、2017年6月以降はあまり更新されてなさげなとこが気になるのだが、APIもあるようで十分に遊べそうな印象。せっかくAPIも用意されてるので、ここからデータを引っ張ってみる。

APIについては、以下のような仕様のようだ。

  • jsonで出力され...

Linuxなどのターミナル上で、複数列を1列にして表示させるのってどうすると良いんだろなと思ったので、ちょっと調べてみた。 1列に変換するといっても、横方向と縦方向の2パターンあると思うので、一応両方のパターンについてやってみる。

横方向から1列に変換する

横にスペース区切りに縦1列に変換する場合は、以下のようにxargsで読み込んでいってあげるといいだろう。

cat file.path | xargs -n1
blacknon@blacknon-ThinkPad-X201:~$ cat test1.txt 
a01 a02 a03 a04 a05
b01 b02 b03 b0...

xargsライクにパラレルでコマンドを実行させる『machma』

ネットで調べ物中に、xargsみたいな使い方でパラレルでコマンドを実行させることができる『machma』なるコマンドツールを見かけたのでお試し。 GNU拡張されたxargsの場合、並列でコマンドを実行させることができるのだが、実行結果の出力時に使用したパラメータを先頭に入れて表示してくれたりするので、使い勝手はこちらのほうが良いと思う。

Golangで記述されているので、まだGoのコンパイル環境がない場合は別途用意する必要がある。 環境が用意できたら、以下のコマンドでインストールを行う。

go get github.com/fd0/machma
go install github....

シェル芸の検証などなどで、時たま適当なCSVファイルが必要になることがあるので、簡単に生成するようのワンライナーを用意しておきたいなぁと思ったので備忘。 特に難しいこともなく、以下のようにコマンドを実行してやれば生成できる。 とりあえず、20行(数字)8列(アルファベット)で作成している。

echo {01..20}{{A..G}",",H} | xargs -n8 | tr -d ' ' # echoの段階で区切り文字を入れるパターン
echo {01..20}{A..H} | xargs -n8 | sed 's/ /,/g'    # スペースをカンマに置換するパターン

awkとxargs、evalを用いてcsv形式のファイルからchmod/chownを実行する

CSV形式で書かれているファイルにファイルPATH、オーナー、グループ、権限を書いておき、それを読みだしてワンライナーでchmod、chownを実行する方法を探していたが、とりあえず以下のようにすれば実現できることがわかった。

なお、ファイルの中身は以下のように書かれているとする。

[root@test-centos7 ~]# cat /root/test.lst
755,test,test,/work/aaaaa.txt
777,test,test,/work/aaaaa.txt.bk
666,test,test,/work/aaaaa2.txt
555,test,test,/wor...

xargsコマンドで覚えておきたい使い方・組み合わせ7個(+1個)

LinuxやUNIXで、コマンドちょっと組み合わせて利用する際、非常に役に立つxargsコマンド。
今回は、このxargsコマンドで覚えておきたい使い方・組み合わせについて紹介する。

1.基本的な使い方

まず、そもそもこのコマンドはどういう使い方をするのか。
基本的には、以下のようにパイプでつなぐことで前のコマンド(コマンド1)で取得した値(標準出力)を利用してxargsで指定した別のコマンド(コマンド2)に引数として渡して実行させる事ができるコマンドだ。

コマンド1 | xargs コマンド2

[root@test-centos7 ~]# find /work -ty...