Problematyczny fragment skryptu ma wyciąć z outputu danego polecenia jego daną kolumnę i wiersz, np. ./skrypt.sh "ps aux" 11 4 ma wyciąć nazwę 4 procesu (11 kolumna) z listy. Rozwiązanie nieskomplikowane: ps aux |awk 'NR==4 {print $11}', problem w podaniu zmiennych w samym skrypcie. Mam wyciągane z linii poleceń m.in. takie zmienne:
$command=$1
$awk_col="{print\\$$3}"
$awk_row="NR==$4"
Składam to w jedną całość:
cmd="$command |awk '$awk_row $awk_col'"
I wywołuję:
$cmd
Efekt: ps zwraca błąd:
ERROR: Garbage option.
No OK, nie wiem skąd taki błąd, ale ostatecznie nie muszę robić tego w ten sposób - dlaczego nie wywołać polecenia bez tworzenia zmiennej? Zatem po prostu:
$command |awk '$awk_row $awk_col'
Nie działa - no tak, te apostrofy sprawiają, że $awk_row i $awk_col nie będą żadnymi wartościami. Poprawmy:
$command |awk \\'$awk_row $awk_col\\'
Efekt:
awk: 1: unexpected character '''
I w tym momencie ręce mi opadły. Mam nadzieję, że nieco bardziej zaawansowani w bashu będą potrafili wskazać, gdzie robię błąd, a może zaproponować całkiem inne i lepsze rozwiązanie. Dzięki z góry za wszelkie wskazówki!