シェル芸で繰り返し同じコマンドに出力をパイプで渡して処理をさせる

シェル芸botで遊んでた際、echo-sdをネストさせて表示するという処理があったので、なんかいい感じに回数増やせないかなと思って調べてみた。 で、パイプ付きの処理をブレース展開させてevalで実行させて、その時に最後にcatで出力を読み込ませてみたらいい感じに処理させることができた。

command | eval 'command |'{,,} cat

例えば、echo-sdをネストさせる場合だと以下のようになる。

echo-sd | eval 'xargs echo-sd |'{,,,} cat

他に使いみち無いかな…と思って考えてみたところ、hashのストレッチングに...


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...

シェルスクリプトでevalコマンドを用いた変数の2重展開

シェルスクリプトを作成する際、事前に定めた変数名をスクリプト内で他の変数に代入し、それを展開・利用したいシチュエーションもあるだろう。
そんな時は、evalコマンドを用いて変数を2重展開することで対応可能だ。

例えば、以下のようなスクリプトを作成したとする。

#!/bin/sh
# 変数 VALに値が入力されている
VAL="test"

# 変数 EVAL_VALに、変数名である「VAL」という文字列を入力
EVAL_VAL="VAL"

# 変数 EVAL_VALを呼び出す
echo $EVAL_VAL

これをそのまま実行した場合、当然ながら出力される値は「VAL」となる。

...