Фактически, если вы так понимаете, исполняемый файл, указанный в строке shebang, является просто исполняемым файлом. Имеет смысл использовать какой-нибудь текстовый интерпретатор в качестве исполняемого файла, но в этом нет необходимости. Просто для пояснения и демонстрации я провел довольно бесполезный тест:
#!/bin/cat
useless text
more useless text
still more useless text
Назвал файл test.txt и установил исполняемый бит chmod u + x test.txt
, затем «назвал» его: ./test.txt
. Как и ожидалось, выводится содержимое файла. В этом случае кошка не игнорирует линию шебанг. Он просто выводит все строки. Таким образом, любой полезный интерпретатор должен иметь возможность игнорировать эту строку shebang. Для bash, perl и PHP это просто строка комментария. Так что да, они игнорируют строку shebang.
Я предполагаю, что это известная проблема... как люди обычно решают ее в сценарии оболочки?
Они передают список файлов и каталогов в sort -r
.
Если вы получаете список файлов и каталогов от find
, вы также можете использовать опцию -depth
для обеспечения обхода последовательностей.
Неважно, я понял это независимо.
Это можно сделать с помощью awk
. Обратите внимание, что это решение не допускает новые строки в имени файла.
awk -- '{a=$$0;b=$$0;print(gsub("/","/",a)-sub(/\/$$/,"aaa",b),$$0)}' INPUT_FILE.txt \
| "$(call Q2,/usr/bin/sort)" -k1,1nr \
| cut -d " " -f 2-
И пока я здесь - строки можно дедуплицировать с помощью следующего:
awk -- '{pos[$$0] = NR} END { for(key in pos) reverse[pos[key]] = key; for(nr=1;nr<=NR;nr++) if(nr in reverse) print reverse[nr] }' INPUT_FILE.txt
Обратите внимание, что дедупликация критична для предотвращения экспоненциального увеличения времени, если вы закончите повторение .
Вы можете попробовать упорядочить файлы по количеству косых черт в нем (по убыванию), таким образом вы должны решить проблему с упорядочением.