Portál AbcLinuxu, 14. května 2025 00:02
local
, nebo toto použít při jejich přiřazení.
echo
. Některé bere "-e" jako argument, jiné ne. Nemůžete tedy spolehlivě vypsat "-e". --
to neinterpretuje jako konec argumentů. Zbývá tedy použít print, echo je prostě nebezpečné. Můžou za to v podstatě GNU rozšíření přidávající různé argumenty. Pak taky demence, která uřezává znaky nových řádků z výstupu programu do proměnné. Musíte pak v podstatě řešit hacky typu použití print pro vypsání náhodného znaku za příkazem, a ten pak odříznout. Další programy přidávají newline úmyslně. takže musíte odříznout ten znak a jeden newline. Bash ale sám odřízne všechny newline znaky, co jsou nakonci.
#!/bin/sh for FILENAME_BASE64 in $(find . -type d -exec base64_fn.sh {} \;) do FILENAME=$(printf '%s' "${FILENAME_BASE64}" | base64 -d; printf x) FILENAME="${FILENAME%?}" printf '%s\n' "${FILENAME}" donebase64_fn.sh:
#!/bin/sh printf '%s' "${1}" | base64
echo -e "$(echo -ne "ABCDEFGH" | hexdump -ve '1/1 " x%02x"' | tr ' ' '\\')"Oba potřebné program busybox má. Navíc odpadá program na zpětný převod, (ba)sh ji udělá sám.
echo -e
? V busyboxu funguje, ale v dash
i:
$ echo -e "\x41\x42\x43\x44\x45\x46\x47\x48\x0a" -e \x41\x42\x43\x44\x45\x46\x47\x48\x0a
x%03o
pro oktal čísla. Sežere to pak
$ printf '%s' "ABCDEFGH" | hexdump -ve '1/1 " %03o"' | tr ' ' '\\' \101\102\103\104\105\106\107\110 $ printf '%b' "\101\102\103\104\105\106\107\110" ABCDEFGH
dash
i:
jardik@Jardik-PC:~/Downloads$ dash $ printf "\x41\x42\x43\x44\x45\x46\x47\x48\x0a" \x41\x42\x43\x44\x45\x46\x47\x48\x0a $ type printf printf is a shell builtin $
00 0A
.
# Handle symlinks PROGRAM="$0" while [ -L "$PROGRAM" ]; do PROGRAM=`readlink -f "$PROGRAM"` printf 'symlink to: %s\n' "\"${PROGRAM}\"" done printf 'cd to: %s\n' \""`dirname \"$PROGRAM\"`"\" cd "`dirname \"$PROGRAM\"`"Autor se snažil být chytrý a počítal se symlinkama. Snaží se dostat adresář, kde se nachází spouštěný skript. A nepochodil. Můj se nachází v
/home/jardik/Apps/FreeRapid-0.9u4<newline>
, a on se snaží cd
do /home/jardik/Apps/FreeRapid-0.9u4
, který neexistuje.
znak nového řádku v názvu souboru může použít jen nějaký šťouraNo právě - když hrozí, že zpracováváš soubory od náhodných útočníků ze sítě…
Hodně programátorů zapomíná používat uvozovky a pak se jim skripty rozbíjejí při prvním výskytu mezery v názvu souboru (ahoj autotools!). Když né mezery, tak se to zas rozbije, pokud je v názvu souboru znak nového řádkuOno napsat v bashi skript který přežije newlines v názvech souborů je dost komplikované.
Třeba echo. Některé bere "-e" jako argument, jiné ne.-n je ještě lepší, to neprojde snad nikde.
Tak kde to teda nefunguje?Vždyť sis sám odpověděl přesně tím co jsem napsal - všude.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.