なぜこれが機能しないのですか?
find . -maxdepth 1 -type f -print0 | xargs -0 .
私が得るのはすべてですxargs: .: Permission denied
。
なぜこれが機能しないのですか?
find . -maxdepth 1 -type f -print0 | xargs -0 .
私が得るのはすべてですxargs: .: Permission denied
。
を実行する. file
と、シェルビルトインが呼び出されます.
。xargs
バリアントは現在のディレクトリを実行しようとします。
それがビルトインを呼び出したとしても、そのコマンドはサブシェルで実行されるため、すべての「ソーシング」は役に立たないでしょう。
そのためにシェルグロブとループを使用します。
for file in * ; do
if [ -f "$file" ] ; then
. "$file"
fi
done
@Matのソリューションは最もクリーンですが、楽しみのためにbash-fuに興味がある場合は、元のコマンドに基づく次のソリューションfind
も機能します。
eval $(find . -maxdepth 1 -type f -exec echo . \'{}\'';' \;)
find
-exec
は、見つかった各ファイルのソーシング コマンドを構築するために使用されます. './foo';
。ファイル名に特殊文字が含まれていることを確認するために、エスケープされた一重引用符に注意してください。適切に処理されます。find
ソース コマンドの改行区切りのリストを返します。二重引用符を付けずにコマンド置換 ( $()
)を使用すると、シェルはこれらの行を区切り文字としてそれぞれスペースを使用して 1 行に折り畳みます。eval
、現在のシェルのコンテキストでソーシング コマンドの完全なリストを実行します (OS X 10.8.1 で検証済み)。注: このソリューションの潜在的な問題の 1 つは、多数のファイルや長いファイル名が存在する場合、コマンド文字列が大きくなる可能性があることです。