カスタム組み込み関数bash
(例:)を作成したいと思いますtime
。可能ですか?そうでない場合は、別のシェルに存在できますか?
たとえば、私はこれをCWDのすべてのディレクトリで実行しmap find -name '*.js' | xargs grep func1
たいと思います。find -name '*.js' | xargs grep func1
すべて参考にしてくださいパイプ付きに渡されますmap
。
目標は、複数のディレクトリにわたってコマンドを適用することです。私は生産されたすべてmap
をカバーするスクリプトを書いた。ただし、パイプ、リダイレクトなどを含むコマンドを実行するには、文字列内のすべての内容を引用する必要があります。これが起こらないようにする方法を探しています。eval
$1
ls
また、これが可能かどうか疑問に思います。 ;)
ベストアンサー1
ATT ksh、bash、およびzshには、既存のシェルインスタンスに追加のコードをロードできる動的モジュールロードシステムと、新しい組み込み機能を実装するために動的にロードされたコードがあります。しかし、あなたは新しい組み込み機能以上のものを求めています。新しい構文が必要で、シェルはそれを処理できないと思います。シェルのソースコードでパーサーを変更する必要があります。
zshでは、目的の構文に近づくことができます。
for x (*/) (cd $x && pipeline)
エイリアスを作成できますが、alias map='for x (*/) (cd $x &&'
最後にはまだ閉じる角かっこが必要です。粗雑なハッキングであなたの好みのフレーズを得ることができます。
alias map='map__PWD=$PWD; for x (./*/ "") cd $map__PWD${x#.}/ && [[ -z $x ]] || '
これは醜すぎて壊れやすく、一般化できないので説明しません。どのように機能するかを完全に理解していない場合は、使用を検討しないでください。