Передать параметры сценарию AWK в обход AWK

Наконец-то нашел то, что нужно

  • blkid -o value -s TYPE <image>вернет тип fs или ничего, если это необработанные данные.

РЕДАКТИРОВАТЬ:

Как упоминал @psusi, partedимеет машинный анализируемый вывод. Я нахожу это менее удобным, чем использование blkid, но тоже может быть полезным.

  • parted -m <image> print | tail -n +3 | awk -F ":" '{print $(NF-2)}'напечатает тип файловой системы каждого раздела.

tail -n +3используется для пропуска двух первых строк
awk -F ":" '{print $(NF-2)}'используется для получения типа fs, который является третьим последним элементом, начиная с конца

3
13.03.2020, 01:37
2 ответа

Ради вызова,это можно сделать с FreeBSDenvили с GNU env >= 8.30 (, уже принятым OP )в шебанге:

#! /usr/bin/env -S sh -c 'exec awk -f "$0" -- "$@"'
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }
./myscript -h 1 2 3
-h
1
2
3

Однако это не значит, что это хорошая идея.

Вместо этого вы можете попробовать это:

#! /bin/sh
BEGIN { 2>"/dev/null"
        exec awk -f "$0" "--" "$@"
}
BEGIN { for(i = 1; i < ARGC; i++) print ARGV[i] }

Это предполагает, что у вас нет команды BEGINв вашем PATH.

4
28.04.2021, 23:20

Если у вас есть GNU awk, вы можете использовать это

#!/usr/bin/gawk --exec
BEGIN { print "==>",ARGV[1],"<==" }

Пример использования

./a -h
 ==> -h <==

Я не проверял это, но вариант mawk, похоже, использует -W execвместо --exec. GNU gawkутверждает, что поддерживает и это, но это не работает с #!.

2
28.04.2021, 23:20

Теги

Похожие вопросы