Po użyciu następującego polecenia
pngString="$(cat example.png)"
echo -n "$pngString" > tmp.png
Nie mogę otworzyć pliku tmp.png jako pliku PNG. Być może niektóre informacje są tracone, gdy używam $pngString
do przechowywania pliku obrazu.
Pytanie brzmi: w jaki sposób mogę przechowywać pełne informacje o obrazie, używając zmiennej w skrypcie bash?
cat
i echo
wszystkie podobne są narzędziami tekstowymi . Pozbawienie ich niczego nie podejrzewających plików binarnych przyniesie nieprzewidziane skutki. Właśnie dlatego base64
wymyślono takie rzeczy .
cat example.png > tmp.png
lub lepiej cp example.png tmp.png
?
cat
tak naprawdę nie jest narzędziem tekstowym. To podstawienie polecenia (które usuwa końcowe znaki nowego wiersza), przypisanie zmiennej (która nie może zawierać bajtów pustych) i echo
polecenie (które może interpretować sekwencje odwrotnego ukośnika), które nie będą miały wpływu na układ binarny cat
. Ale zgadzam się z twoim ogólnym punktem.