매개 변수 (Vars)가있는 awk shebang이있는 스크립트 호출
문제
다음과 같이 정의한 AWK 스크립트가 있습니다.
#!/usr/bin/env awk
BEGIN { if (!len) len = 1; end = start + len }
{ for (i = start; i < end; i++) { print $1 } }
나는 그것을 그대로 저장했다 columns
그리고 chmod +x
'D. 나는 그것을 호출하고 싶다 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은 Unixen에서 비표준 Shbang 구현의 어려움을 해결해야합니다.
편집하다
이것을 쓴 후 나는 '-s'가 비 포스 준수 freebsd env 확장임을 깨달았습니다.. 따라서 쉘 래퍼는 아마도 불행한 길일 것입니다.
아래는이 문제에 대한 답입니다.
#!/bin/awk -f
제휴하지 않습니다 StackOverflow