كيف يمكنني كتابة إجراء تلقائي في باش مع الملفات والمجلدات كوسيط؟

StackOverflow https://stackoverflow.com/questions/2169206

  •  24-09-2019
  •  | 
  •  

سؤال

عندما أقوم بإنشاء إجراء تلقائي في 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"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top