Jedním z nejběžnějších úkolů při psaní skriptů Bash nebo práci na příkazovém řádku Linuxu je čtení a zápis souborů.
Tento článek vysvětluje, jak zapsat text do souboru v Bash pomocí operátorů přesměrování a tee
příkaz.
Zápis do souboru pomocí operátorů přesměrování #
V Bash vám přesměrování výstupu umožňuje zachytit výstup z příkazu a zapsat jej do souboru.
Obecný formát pro přesměrování a zápis výstupu do souboru je následující:
output > filename
output >> filename
>
operátor přesměrování zapíše výstup do daného souboru. Pokud soubor existuje, je zkrácen na nulovou délku. V opačném případě je soubor vytvořen. Při používání tohoto operátoru buďte zvlášť opatrní, protože můžete přepsat důležitý soubor.>>
Operátor přesměrování připojí výstup k danému souboru. Soubor je vytvořen, pokud neexistuje.
Musíte mít oprávnění k zápisu do souboru. V opačném případě se zobrazí chyba oprávnění odepřeno.
Zde je jednoduchý příklad ukazující, jak přesměrovat výstup echo
příkaz do souboru:
echo "this is a line" > file.txt
Chcete-li zabránit přepsání existujících souborů, povolte volbu „noclobber“ pomocí set
vestavěný:
set -o noclobber
echo "this is a line" > file.txt
bash: file.txt: cannot overwrite existing file
>|
operátor vám umožňuje přepsat volbu Bash „noclobber“:
set -o noclobber
echo "this is a line" >| file.txt
>>
operátor připojí výstup na konec souboru, místo aby soubor přepsal:
echo "this is a line" >> file.txt
Použijte printf
příkaz k vytvoření komplexního výstupu:
printf "Hello, I'm %s.\n" $USER > file.txt
Pokud chcete do souboru zapsat více řádků, použijte přesměrování Here document(Heredoc).
Obsah můžete například předat cat
a zapište jej do souboru:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Chcete-li přidat řádky, změňte >
pomocí >>
před názvem souboru:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
Výstup libovolného příkazu můžete zapsat do souboru:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
Výstup date
příkaz bude zapsán do souboru.
Zápis do souboru pomocí tee
Příkaz #
tee
příkaz čte ze standardního vstupu a zapisuje jak na standardní výstup, tak na jeden nebo více souborů současně.
echo "this is a line" | tee file.txt
tee
výchozím chováním příkazu je přepsání zadaného souboru, stejně jako >
operátor. Chcete-li připojit výstup k souboru, vyvolejte příkaz s -a
(--append
) možnost:
echo "this is a line" | tee -a file.txt
Pokud nechcete tee
pro zápis na standardní výstup jej můžete přesměrovat na /dev/null
:
echo "this is a line" | tee file.txt >/dev/null
Chcete-li zapsat text do více než jednoho souboru, zadejte soubory jako argumenty pro tee
příkaz:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
Další výhoda tee
příkaz je, že jej můžete použít ve spojení s sudo
a zapisovat do souborů vlastněných jinými uživateli. Chcete-li přidat text k souboru, do kterého nemáte oprávnění k zápisu, přidejte před sudo
před tee
:
echo "this is a line" | sudo tee file.txt
echo
výstup příkazu je předán jako vstup do tee
, což zvýší oprávnění sudo a zapíše text do souboru.
Závěr č.
V Linuxu k zápisu textu do souboru použijte >
a >>
operátory přesměrování nebo tee
příkaz.