Portál AbcLinuxu, 10. května 2025 22:00
cat zdroj > cílPřes proměnnou je to trochu komplikovanější:
TEMP=`cat zdroj` echo -n "$TEMP" > cíl
var='-n -n -n' cat > nějaký_soubor <<<"$var"
To se rozbije pro binární soubory nebo třeba když v tom souboru bude napsáno "-n".Ano, lebo robi len to, co mu povies. ... Nie je problem spravit aj nacitanie binarneho suboru. Sprav tak, ze v premenne bude ukladane/nacitane zakodovane, napr. base64.
Soudě podle tohoto komentáře, myslím, že se snažíš uložit soubor do proměnné prostředí. (Aby se pak dal odtud znova přečíst zase ve stejném interaktivním shellu.)
To ale nemůžeš udělat skriptem spouštěným v samostatném shellu, protože shell interpretující skript nemůže nijak ovlivnit proměnné prostředí procesu, který ho spustil. Takže skript sice uvidí všechny proměnné, které jsi ve svém interaktivním shellu exportoval, ale nemůže je nijak změnit ani k nim přidat nové. Přesněji, všechny změny, které udělá, zůstanou jen v jeho adresním prostoru [pořád extrémně zjednodušeno] a nebudou mít žádný vliv na ten původní shell, který celý skript (interpretovaný druhým, neinteraktivním shellem) spustil.
Můžeš ale docílit něčeho podobného, když si skript zainlinuješ (pomocí . nějaký_skript.sh
). Takový skript se pak vykoná přímo v kontextu toho interaktivního shellu (bez spouštění odděleného procesu) a může tedy měnit jeho proměnné.
Ještě lepší je použít funkce. A nejlepší je dát je třeba do ~/.bashrc
, aby byly všude dostupné.
cp_file_var() { eval "$2"='"$(cat "$1")"' } cp_var_file() { cat > "$2" <<< "${!1}" }
Příklad použití:
cp_file_var /proc/cpuinfo cpuinfo_snapshot cp_var_file cpuinfo_snapshot /tmp/cpuinfo diff /{proc,tmp}/cpuinfo # Frekvence se můžou lišit. echo "$cpuinfo_snapshot" # Jo, fakt je to proměnná.
Asi bych ale něco takového nezkoušel na jiné soubory než textové.
tee
:
PROMENNA=`cat zdroj|tee cil`Kopíruje data ze
zdroj
e do cil
e a zapisuje do proměnné PROMENNA
(do obou míst ve "stejnou" chvíli, bez ukládání do proměnné před uložením na disk).
$ cat >file0 aaa bbb ccc ddd $ VAR=$(cat file0|tee file1) $ echo $VAR aaa bbb ccc ddd $ echo "$VAR" aaa bbb ccc ddd
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.