Adott egy egyszerű szkript melyet megadtam az AT időzítőnek.
Ezt az egyszerű szkriptet is már egy másik szkript hozta létre.
Tehát változhatnak a mappa és fájlnevek, meg a szkriptben lévő dolgok is,
Az AT időzítőben minden helyesen meg is jelenik (sudo cat /var/spool/at/*feladat)
cd /home/user/my pathX/my dirX (MOST éppen ebben van a futtatandó szkript)
sh futtatandó szkript (szintén akad benne szóköz)
rm -f futtatandó szkript (törölje a szkriptet ha végzett)
Az AT parancs nem hajtódik végre a mappa szerkezet, és a fájlnevekben lévő szóközök miatt.
Már próbáltam az IFS=" "-t. Próbáltam az idézőjelekkel escapelni.
De míg a terminálban jó,
echo ""cd '"/home/user/my path/my dir"' ""
a szkriptben már nem, mivel az idézőjelek miatt szöveg lett a változó.
S ez az eredmény:
echo cd "${első}/${szkript}/${változója}" - Ez meg értelmetlen
Megakadtam. A létrehozó szkriptben kell finomítani a dolgokat, de még nem tudom mit.
- 1201 megtekintés
Hozzászólások
Így próbáltad már?
cd /home/user/my\ path/my\ dir
- A hozzászóláshoz be kell jelentkezni
Ismerem ezt a megoldást, de ha egy szkript készíti el az útvonalakat is, annak ezt hogy adom meg, hogy irkálja bele a visszaper jeleket a megtalált könyvtárak esetén?
Szerkesztve!
De kicsit később már rájöttem ahogy visszaolvastam. Hiába este van már...
Ez jó kiindulópont lehet:sed
echo "Valami Amerika" | sed 's/ /\\ /g'
Valami\ Amerika
- A hozzászóláshoz be kell jelentkezni
Ne te szenvedj a szóközökkel, takard el az egész paramétert, pl. idézőjelekkel körbevéve. (Jelzem a jujniksz shell-ek esetén az "" egy nagy büdös *semmit* fog eredményezni. Ha át akarsz adni egy idézőjelet, akkor aposztrófokkal ( '"' ) vagy hanyatt-törtvonallal ( \" ) takard.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Hogy mi van?
az at-nek átadott scriptet (nevezzük script2-nek) generálod egy másikkal (script1). De mindenféle változók bekavarnak?
script1:
echo cd '"'"$ide"'"' > script2
echo echo \""$v1"\" >> script2
eredménye:
script2:
cd "script1-beli-ide-változó-tartalma-nevű-könyvtár"
echo "ez-itt-script1-beli-v1-változó-tartalma"
Szóval nem értem. Esetleg ha valami nagyon egyszerű példán elmagyaráznád, hogy mit írtál, mit vártál, mi az eredmény, stb ...
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Próbálom az echo-dat értelmezni. Szerintem így kellene írnod:
echo cd \"/home/my path/my dir/my file\" > script2
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
De még ez sem túl szép, mert ez az echo-nak több paraméter. Nem lehetne, hogy egy legyen?
echo "cd \"/home/my path/my dir/my file\"" >script2
Vagy:
echo 'cd "/home/my path/my dir/my file"' >script2
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
A több paraméteres echo miért baj? Definíció szerint ha az echo több paramétert kap, akkor azokat egy db szóközzel elválasztva írja ki. Mivel ez az adott feladatnál pont jó, én nem kezdek el azzal szenvedni, hogy idézőjelen belül lehet-e backslash-sel takarni másik idézőjelet (erre ugye "igen" a válasz, ellentétben az aposztrófon belüli aposztróffal), vagy hogy ha aposztrófok között írok idézőjelet (vagy idézőjelek közé aposztrófot), akkor pont mi lesz. Szerintem az a fő gond, hogy az emberek nem hajlandóak megtanulni a \ ' " hármas használatának szabályait, aztán persze szívnak ilyen egyszerű dolgokkal.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Nekem azért nem tetszik, mert egymást követő egynél több szóköz esetében nem működik. Sőt, ha a filenév egyetlen szóköz, akkor sem.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Mi nem működik?
$ mkdir " "
$ cd " "
$ echo ":$PWD:"
:/tmp/ :
$
Mindegy. A lényeg - szerintem -, hogy ha az ember tudja mire jó a szóköz, a \ , ' és az " - és a használatát is, akkor az esetek döntő többségében meg tudja oldani az ilyen problémákat. De általában nem tudja.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Te magad írtad:
A több paraméteres echo miért baj? Definíció szerint ha az echo több paramétert kap, akkor azokat egy db szóközzel elválasztva írja ki.
Kiemelés tőlem. Épp ez az. Ha hagyod az echo-ban szétesni a szóközök mentén paraméterekre, akkor az egy szóköznél rendben lesz, de két egymást követő szóköz mentén is csak kétfelé hullik a string, így az echo kimenetében továbbra is egy szóköz lesz. Az meg már nem az eredeti filenév. Tehát úgy volna helyes, hogy egyben kell tartani a stringet, s azt kell átadni az echo-nak.
Amúgy nem kekeckedem, tudom, hogy nálam nagyobb rutinod van shell scriptelésben, nyilván csak félreértés volt, picit elbeszéltünk egymás mellett. :)
echo a b
vagy
echo a b
illetve
echo "a b"
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Kezdem kapisgálni, de azért azt tisztázzuk: az echo egyáltalán nem kap szóközöket a paraéterei között, mert a parancssort a*shell* már szétszedi neki argumentumlistára (amiben az elválasztó 1-2-3-...-n db szóköz már nincs ott, csak a paraméterekben szereplő szóközök maradnak, ha elrejtettük őket). Pont ezért kell tudni, hogy mire jó a \ ' " trió, hogy mikor akarom, hogy szétessen és mikor nem. Tehát ha fizikailag átadom az(oka)t a szóköz(öke)t, az echo szépen kiírja, annyit és oda, amennyi és ahol van.
Egyik kedvenc elborzasztó példám:
$ echo \ \ \ # backslash szóköz backslash szóköz backslash szóköz
$ echo \ \ # backslash szóköz szóköz backslash szóköz
$ echo \ \ \ # backslash szóköz szóköz backslash szóköz szóköz backslash szóköz
Hány paramétert kap az echo és mi a kimenet? (1 param - 3 sp ; 2 param - 3 sp ; 3 param - 3 sp)
És pont azért kell értelmesen használni a " vagy ' jeleket, mert általában olvashatóbb, mint a \ . Nyilván fenti borzadvány egy cseppet tud olvashatóbb / olvashatatlanabb is lenni, ha a \ helyett ' vagy " párokat használ az ember. Ez '......' nyilván olvashatóbb, de '.''.''.' már nem annyira, "."'.'"." meg szerintem végképp tragikus - főleg egy jól választott fontkészlettel.
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
No ez az. Tehát nekem az volt az észrevételem, hogy shelltől való elzárás nélkül hiába szúrja a kimenetbe az echo a szóközt, ha a shellnek a paramétereket szeparáló kifejezés az egy vagy több szóköz. Így az echo nem tudja, hogyan szeparálódott a paraméter lista, egy szóközzel vagy többel, s ha többel, mennyivel. Ezért kell a filenevet egyetlen stringként, egyetlen paraméterként átadni.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Nos most itt tartok:
script1:
echo cd "${my path}/${my dir}/${file name}/" | sed -e 's/ /\\ /g' > ${at_data}
script2:
cd\ /my\ path/my\ dir/file\ name/
De kapom az emailt az AT-től:
sh: sor: 85: cd /my path/my dir/: Nincs ilyen fájl vagy könyvtár
Most kipróbálom amit írtál.
- A hozzászóláshoz be kell jelentkezni
Hát ez az, hogy a sed-es trükk a cd utáni szóköz elé is rak backslash-t, ezáltal az eredmény az lesz, mintha "cd izé mizé ecet" formában adnád meg a parancsot - node ilyen nevű parancs nincsen :-)
=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?
- A hozzászóláshoz be kell jelentkezni
Erre már rájöttem. :D
Viszont érdekes hogy amit te ajánlottál, a hanyatt perjel, az frankón úgy generálja hogy
cd "itt van a kutya elásva"
Ennek ellenére mégsem működik...
Most kipróbálom hogy szóköz nélküli mappával fájlnévvel mit művel.
Banyek... Ekkora lúzert...
Most a szóközök hiánya miatt jobban átláttam a dolgokat. Arról nem is beszélve hogy 9 órát aludtam. Ergo kipihent vagyok.
Úgy volt megadva szkript1-nek hogy "cd my path/my dir/file name/" Holott a file name már nem kell. Hiszen az már a parancs nevében is benne vagyon. Mindössze 3 sort írattam bele az AT időzítőbe.
ugorj a megfelelő mappába
hajtsd végre a fájlnév-dátum parancsot
Töröld a fájlnév-dátum parancsot
S én úgy adtam meg a mappára ugrást hogy benne szerepelt a 'file name' is. Ami persze hogy nem létezett.
Valami kereket szokás forgatni... De már nem tudom hol.
Hogy tudom átírni hogy megoldva? A kezdő üzenetet nem tudom szerkeszteni.
- A hozzászóláshoz be kell jelentkezni