استدعاء برنامج نصي يحتوي على awk shebang مع المعلمات (vars)

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

  •  07-07-2019
  •  | 
  •  

سؤال

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