Jednoduchá roura jako je třeba
pwd | ls
se dá snadno převést na SOUBORY=$(ls $(pwd))
To není ani zdaleka totéž a je vlastně otázka, co si představujete, že by měl ten první příkaz vlastně dělat, protože
ls nezpracovává svůj standardní vstup, takže i např. "
echo ahoj | ls" prostě jen vypíše obsah aktuálního adresáře. Oproti tomu ten druhý příklad příkazu
ls předá výstup
pwd jako parametr(y).
Pokud chcete nahradit rouru, pak můžete použít
process substitution a např.
cmd1 | cmd2
přepsat na
cmd2 < <(cmd1)
Používá se to např. pro konstrukce typu
while ...; do
done < <(some_cmd)
pokud potřebujete, aby tělo toho cyklu neběželo s vlastním environmentem, ale sdílelo ho se zbytkem skriptu.
V každém případě by ale bylo dobré začít tím, že si ujasníte, proč byste to vlastně chtěl takhle přepisovat. Ve vašem případě mi to moc jasné není, protože do
command substitution můžete klidně dát i rouru:
failbanlog=$(awk '($(NF-1) = /Ban/){print $NF}' /var/log/fail2ban.log | sort | uniq | tr -s '\n' ',')