※bashのみ対象
find -execはシェルを実行せずに直接コマンドを実行しているため、シェルで定義したものは使えないらしい。
・UNIX/Linux の find -exec の引数にはシェルの構文を使えない.
http://ameblo.jp/noocyte/entry-10024398713.html
そこで以下の流れで実行することにする
□複数行コマンド
(1) exec内でシェルを実行
サンプル:カレント以下のファイル名と中身をtailする
bashのシンボリックリンクであるshで実行すると、~.bashrcを読み込まない
$ find . -type f -exec sh -c "echo; echo {}; tail -3 {}" \; $ find . -type f -exec bash -c "echo; echo {}; tail -3 {}" \;
□ユーザー定義関数
(1) 関数を定義しexportする
$ function test1() { > echo; echo $1; tail -3 $1; > } $ export -f test1
(2) exec内でシェルを実行
$ find . -type f -exec sh -c "test1 {}" \;
(3) 不要なら削除
$ unset test1
0 件のコメント:
コメントを投稿