
Solaris 9 の Bourne Shell で実行しようとしているコマンドがあります。
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
私の問題は、変数が${PARSEDATA}
正しく機能しないことです。変数を二重引用符で囲んでみましたが、問題は$0
コマンドを使用して見つかったファイルではなく、このコードを実行するスクリプトの名前にありますfind
。
おそらく簡単な問題ですが、この問題を解決するための提案があれば、非常に役立ちます。
前もって感謝します。
アップデート: $0
はコマンドを使用して検索されたスクリプトの名前でfind
、変数は${PARSEDATA}
システム上のどこかにあるフィルターで、検索された各スクリプトの出力を変更します。ただし、問題は、両方を取得できず、$0
適切${PARSEDATA}
に展開できないことです。$0
単一引用符を使用して適切に展開するか、二重引用符を使用して${PARSEDATA}
適切に展開しますが、その後、$0
このコマンドを実行する元のスクリプトの名前になりますfind
。
答え1
何をしようとしているのかよく分かりません。しかし、check_*という名前のスクリプトを探してそれを実行し、プログラム${PARSE_DATA}にパイプしたいのであれば、findで見つかったファイルはそうではないと思いますが$0
、{}
例
/var/ftp/mp3 を検索 -name "*.mp3" -type f -exec chmod 644 {} \; (Wikipedia)
したがって、二重引用符を使用できると思います。
find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}
成功しました:
PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;
> Bleh Blah
答え2
一重引用符はそのままにしておいてください。問題は PARSEDATA 変数をエクスポートしていないことが原因である可能性が非常に高いです。
export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
答え3
$0 をシェルで展開しないようにし (一重引用符を使用)、${PARSEDATA} を展開したい場合は、それぞれに異なる引用符を使用すればよいでしょう。
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}
引用符で囲まれた部分を結合したままにしておくと、シェルは ${PARSEDATA} を展開し、コマンド全体を単一のトークンとして検索に渡します。