كيف يمكنني كتابة إجراء تلقائي في باش مع الملفات والمجلدات كوسيط؟
سؤال
عندما أقوم بإنشاء إجراء تلقائي في Xcode باستخدام Bash ، تتم طباعة جميع الملفات ومسارات المجلدات إلى Stdin.
كيف أحصل على محتوى تلك الملفات؟ مهما أحاول ، أحصل على اسم الملف فقط في الإخراج.
إذا قمت فقط بتحديد "Run Shell Script" ، فيمكنني تحديد ما إذا كنت أريد أن يكون كل شيء stdin أو كوسائط. هل يمكن القيام بذلك لمشروع Xcode؟
من الأسهل تقريبًا استخدام Applescript ، والسماح بذلك بتشغيل Bash.
حاولت شيئًا مثل
xargs | cat | MyCommand
المحلول
ما هو الأنبوب بين xargs
و cat
به هناك؟ محاولة
xargs cat | MyCommand
أو أفضل ،
xargs -R -1 -I file cat "file" | MyCommand
للتعامل بشكل صحيح مع أسماء الملفات مع المسافات وما إلى ذلك.
إذا ، بدلاً من ذلك ، تريد استدعاء MyComand على كل ملف ،
local IFS="\n"
while read filename; do
MyCommand < $filename
done
قد تكون مفيدة أيضا.
نصائح أخرى
read
سوف تقرأ خطوط من stdin البرنامج النصي ؛ فقط تأكد من ضبط $IFS
إلى شيء لا يتداخل إذا تم إرسال أسماء المسارات دون أن تهرب من أي مسافات:
OLDIFS="$IFS"
IFS=$'\n'
while read filename ; do
echo "*** $filename:"
cat -n "$filename"
done
IFS="$OLDIFS"