GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu použít řádky souboru jako argumenty příkazu?

command `< file`

předá obsah souboru příkazu na stdin, ale odstraní nové řádky, což znamená, že nemůžete iterovat každý řádek jednotlivě. K tomu můžete napsat skript se smyčkou 'for':

for line in `cat input_file`; do some_command "$line"; done

Nebo (víceřádková varianta):

for line in `cat input_file`
do
    some_command "$line"
done

Nebo (víceřádková varianta s $() místo `` ):

for line in $(cat input_file)
do
    some_command "$line"
done

Odkazy:

  1. Pro syntaxi smyčky:https://www.cyberciti.biz/faq/bash-for-loop/

Jak již bylo zmíněno, můžete použít backticks nebo $(cat filename) .

Co nebylo zmíněno, a myslím, že je důležité poznamenat, je, že si musíte pamatovat, že shell rozdělí obsah tohoto souboru podle mezer, přičemž každé nalezené „slovo“ dá vašemu příkazu jako argument. A i když můžete být schopni uzavřít argument příkazového řádku do uvozovek, aby mohl obsahovat mezery, escape sekvence atd., čtení ze souboru neudělá to samé. Pokud váš soubor například obsahuje:

a "b c" d

argumenty, které získáte, jsou:

a
"b
c"
d

Pokud chcete vytáhnout každý řádek jako argument, použijte konstrukci while/read/do:

while read i ; do command_name $i ; done < filename

Uděláte to pomocí zpětných značek:

echo World > file.txt
echo Hello `cat file.txt`

Pokud je váš shell bash (mimo jiné), zkratka pro $(cat afile) je $(< afile) , takže byste napsali:

mycommand "$(< file.txt)"

Dokumentováno v manuálové stránce bash v sekci 'Command Substitution'.

Případně nechte svůj příkaz přečíst ze stdin, takže:mycommand < file.txt


Linux
  1. Jak používat Linuxový příkaz grep

  2. Jak používat příkaz historie v Linuxu

  3. Jak použít sed k odstranění posledních n řádků souboru

  1. Jak používat příkaz historie Linuxu

  2. Jak používat příkaz Tar v Linuxu

  3. Jak používat příkaz basename?

  1. Jak používat příkaz chgrp s příklady

  2. Jak používat příkaz Bash read

  3. Jak používat příkaz md5sum v Linuxu