Sziasztok!
Van egy függvény (mindegy, hogy honnan, ezt kell használni), ami lefuttat egy parancsot ilyetén:
bash -c -i -l "' echo -e \"X\" >>fajl '"
ahol X a paraméterül kapott string.
Na most nekem ebben a stringben van egy 'asdsad'-em, amire azt írja, hogy
bash: szoveg: No such file or directory, mert a ' nyílván megszakította a külső '-t, és emiatt rá akarná irányítani a fájlt.
A kérdés az az, hogy mit csináljak az X-el (aminek a tartalma kb: blablabla 'asdsad'), hogy úgy ahogy van, kiechozódjon és hozzácsapódjon a fájlhoz? Próbáltam sokféle módon, de csak nem találom el :(
- 1557 megtekintés
Hozzászólások
Nem így kell egymásba ágyazni az idézőjeleket, inkább így próbáld:
bash -c 'echo -e "'"${x}"'" >>f'
- A hozzászóláshoz be kell jelentkezni
Nekem nincs másra befolyásom, csak az X-re. Ez egy másik nyelven írt függvény, ami így adja ki a parancsot, hogy a kapott stringet behelyettesíti X helyére.
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
Egyébként shell injection prone mindkettő megoldás sajnos:]
- A hozzászóláshoz be kell jelentkezni
Input csak megbízható forrásból gyün, illetve remélhetőleg nem root jogokkal futtatja ;)
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
törölve
c
- A hozzászóláshoz be kell jelentkezni
(h)up?
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
Az eredeti nyelven/helyen pontosan hogyan van meghívva az a bizonyos függvény, ami ezt a bash-es parancsot hívja?
- A hozzászóláshoz be kell jelentkezni
Nem egészen értem azt hiszem :)
Van egy függvény, Perl amúgy, de azt hiszem ez lényegtelen. Meghívod így: fgv("omnomnom"); erre ő kiadja a shellnek a fenti parancsot: "' bash -c -i -l "' echo -e \"omnomnom\" >>fajl '"
Az én fájdalmam az, hogy az "omnomnom" egy olyan kifejezés, amiben szerepel ', és ezt az istennek sem tudom sehogy levédeni.
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
Azért érdekes, hogy végig lehessen követni, hogy az escapelés-aposztrófozás hogyan esik ki. Esetleg összerakhatnál egy minimál tesztesetet, ahol ugyanez történik.
- A hozzászóláshoz be kell jelentkezni
Nem pontosan értem, hogy mire gondolsz.
Ha így adom ki: echo -e "asdasd ''" >>fajl
Akkor tökéletes. Csak ugye ő beleteszi egy bash "' ... '"-ba.
Így is jó lenne még: bash -c -i -l "echo -e \"asdasd ''\" >>fajl"
De csak odateszi a " mellé a '-t.
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
$ echo $BASH_VERSION
3.2.39(1)-release
$ bash -c -i "echo -e \"xyz\" >f" ; echo $?
0
$ bash -c -i "'echo -e \"xyz\" >f'" ; echo $?
bash: echo -e "xyz" >f: command not found
127
$ bash -c -i "'echo -e \"xyz 'abc'\" >f'" ; echo $?
bash: echo -e "xyz abc" >f: command not found
127
$ bash -c -i "'echo -e \"xyz \'abc\'\" >f'" ; echo $?
bash: unexpected EOF while looking for matching `"'
bash: syntax error: unexpected end of file
2
Tökmindegy mit kell kiírnia az echo-nak, a "' ... '" eleve rossz, ha bash-ból hívom, ezért gondolom, hogy te nem bashból hívod, és az a nyelv kicsit máshogyan kezeli az aposztrófok együttálását.
Arra gondolok, hogy csinálj egy minimál perl fájlt, ami így néz ki:
#!/usr/bin/perl
...
system("bash -i ..");
azt a hibát adja, amit mondasz, és ezt posztold be. Meg a hibát is. Meg olyan X-el is, amivel jó.
- A hozzászóláshoz be kell jelentkezni
Igaz igaz, nem tűnt fel mert ugyanazt a hibaüzenetet adja.
Egészen pontosan így adódik ki a parancs:
ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 -i /home/tetra/.../id_dsa -p 22 user@x.y.z.w bash -c -i -l "' echo -e \"X\" >> fajl '"
Tehát akkor a kérdés az, hogy hogy tudnám úgy X-t megadni, hogy lehessen benne '.
szerk: valamiért több sorba szedi, nem tudom hogy lehetne megszerelni, pedig kód tegben van.
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
Fasza, így már érthető:)
Így lesz jó:
bash -c -i -l "' echo -e \"X'\'Y\''\" >> fajl '"
- A hozzászóláshoz be kell jelentkezni
YES! Köszönöm!
----
Hülye pelikán
- A hozzászóláshoz be kell jelentkezni
Szívesen;] Érdemes elolvasni a bash quotingot, hogy értsd, miért így kell.
http://www.gnu.org/software/bash/manual/bashref.html#Quoting
- A hozzászóláshoz be kell jelentkezni