[ Megoldva ] Bináris echo Makefile-ból

Egy make folyamat közben a fájlom elejére kellene illesztenem 4 bináris bájtot. Ezt az

echo -n -e '\x00\xFF\x00\xFF' > binfilename

paranccsal meg is tudom tenni. Azonban ez a Makefile-on belülről már nem működik. Ha kiadom a make parancsot, a binfilename tartalma

-e \x00\xFF\x00\xFFlesz.

Van ötletetek, hogyan tudnám ezt mégis megcsinálni?

Hozzászólások

printf '\x00\xFF\x00\xFF' > file

4 és fél éve csak vim-et használok. elsősorban azért, mert még nem jöttem rá, hogy kell kilépni belőle.

Sajnos nem nyert. :( Sem szimpla sem dupla idézőjellel, sem egy sem két \ jellel. Az eredmény a fájlban:

\x00\xFF\x00\xFF

Közben utánaolvastam a printf-nek, és teljes útvonallal kiadva már működik, köszönöm! :)

A helyes megoldás tehát:

/usr/bin/printf '\x00\xff\x00\xff' > binfilename

Lehet, hogy benéztem valamit, de honnan tudod, hogy dash-t használ? Egyébként nekem pont ez a bajom a dash-sel, ksh-val (BSD-k alatt), hogy nagyon szigorúan POSIX és minimalista. Az ember meg hozzászokott a modern GNU, bash, zsh által nyújtott kényelemhez, újításokhoz, amik nélkül elég pain in the ass meglenni. Lassan már elérjük azt a pontot, ahol nem ártana egy POSIXv2-t szabványosítani.

Ennek ellenére használok dash-t, és próbálok arra #!/bin/sh kezdetű scipteket írni, amik portolhatóbbak, de sokszor nagyon nehéz. Pl. vagy egy monitorozó scriptem, ami a watch/gnuwatch-hoz hasonló funkcionalitást nyújt, és read -n 1 -t 3 -s input részt használ. Ez figyeli, hogy lenyomtak-e billentyűt (akkor azonnal újra frissíti az infókat, amit kiír), de 3 mp. után timeout-tól és frissíti a kimenetet a loopban. Ennek az az előnye, hogy nem csak Ctrl+C-vel lehet belőle kilépni, mint a watch-ból, és billentyűt nyomva tartva lehet gyorsítani alkalmanként a frissítésen. Gyönyörűen megy zsh és bash alatt, de ugyanez szigorúan POSIX shellscript-ben megcsinálni oltári nagy kín, mivel ott a read-nek nincs ilyen kapcsolója, és mindenféle dd-vel, subshellel, sleep + wait-tel kell vergődni, oltári bonyás, és még bloatabb megoldáshoz is vezet. Ez is egy olyan dolog, hogy a minimalistább megoldás sokszor nem éri meg, pont erről írtam két napja a shellscript gyorsítása című topikomban a lemonbar vs. polybar, dwm vs. bspwm kapcsán.

The world runs on Excel spreadsheets. (Dylan Beattie)

Igen, pont ezért kérdem, mert nem biztos. Továbbá pont erről beszélek, hogy nem ismer egy csomó kényelmi kapcsolót, nem csak echo-nál, meg read-nél, de grep, awk, sed is korlátozottabb a vanilla POSIX/BSDland formájában, és a különbségeket lehetne sorolni napestig.

Pont ma kínlódtam én is printf-fel, ami pl. %s formázótag nélkül nem kezeli a \uxxxx és \Uxxxxxxxx karaktereket sem, pedig ez Bash alatt volt.

The world runs on Excel spreadsheets. (Dylan Beattie)

Szerkesztve: 2022. 06. 01., sze – 21:18
printf '\0\377\0\377'

vagy

echo 'AP8A/w==' | base64 -d

A makefile-ban lehet választani, hogy milyen shell-t használjon. Alapértelmezetten ez a /bin/sh, ami azzal jár, hogy nem mindent használhatsz, amit pl. bash-ban. Ha a bash-t akarod, akkor a SHELL=/usr/bin/env bash sorral tudod rábírni a make-t, hogy bash-t használjon.

/bin/echo -n -e '\x00\xFF\x00\xFF' > binfilename