استدعاء برنامج نصي يحتوي على awk shebang مع المعلمات (vars)
سؤال
لدي برنامج نصي awk قمت بتعريفه على النحو التالي:
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
لقد قمت بحفظه كما columns
و chmod +x
لقد فعلت ذلك.أريد استدعاء ذلك ذلك start
و end
يتم تعريفها أثناء مرورها عبر ملف.كنت أفكر أن هذا يجب أن يعمل:
cat some_file | columns -v start=2
لكنها لا تفعل ذلك.يساعد!
المحلول
وحاول استخدام:
#!/usr/bin/awk -f
ومترجما
نصائح أخرى
env هي أسهل طريقة للتعامل مع هذه المشكلة:
#!/usr/bin/env -S awk -f
لإضافة المزيد من الخيارات، ولضمان عدم التداخل مع وسيطاتك ووسائط awk:
#!/usr/bin/env -S awk -F: -f ${_} --
BEGIN {
# delete argv[1], which == ENVIRON[_]
delete ARGV[1]
} # rest of my awk program
نظرًا لأن env لديه معيار POSIX، فمن المفترض أن يساعدك هذا shbang على التغلب على صعوبات تطبيقات shbang غير القياسية عبر Unixen.
يحرر
بعد أن كتب هذا أدركت أن "-S" هو امتداد FreeBSD env غير متوافق مع POSIX.لذا ربما يكون غلاف القشرة هو الطريق الذي يجب اتباعه، وهو أمر مؤسف.
وفيما يلي الإجابة عن هذه المشكلة -
#!/bin/awk -f
لا تنتمي إلى StackOverflow