Да, в Bash это возможно чуть менее уродливо:
#!/bin/bash
df | awk -f <(cat - <<-'EOD'
BEGIN{
print "test"
}
{print $3}
EOD
)
Блок кода <()
заменяется путем (что-то вроде /dev/fd/63
), который указывает на дескриптор файла, связанный с выводом кода. Убедитесь, что в скрипте awk используются отступы, а не пробелы (<<-
убирает начальные вкладки).
Другой способ сделать это - скрыть скрипт awk в конце скрипта bash, как это (не забудьте exit
):
#!/bin/bash
df | awk -f <(sed -e '0,/^#!.*awk/d' $0)
exit $PIPESTATUS
#!/usr/bin/awk -f
BEGIN {
print "test"
}
{print $3}