van a köv parancs, amit egy shell script rak össze
/usr/local/bin/rsync -avzu -e ssh /export/dirdir user@host:/export/dirdir >/export/rsync/log/201414142114/dirdir.log
ha a shellbol futtatom $CMD módon, akkor ezt mondja:
Unexpected remote arg: user@host:/export/dirdir
persze ha bemásolom, akkor jó...ha ledobom a végéről a redirectet, akkor is jó???
???
- 4640 megtekintés
Hozzászólások
Mit értesz azon, hogy "$CMD módon"?
CMD="rsync ...", majd $CMD?
- A hozzászóláshoz be kell jelentkezni
+1, lécci a pontos módját másold ide annak, ahogyan hívod a scriptben
- A hozzászóláshoz be kell jelentkezni
CMD=...
$CMD
- A hozzászóláshoz be kell jelentkezni
Szerintem valahol rosszul rakod idézőjelek közé a változóhivatkozást (mondjuk ahol összeépíted a parancssort). Vagy nem idézőjel, hanem aposztróf.
- A hozzászóláshoz be kell jelentkezni
nincs benne seholse macska se meg idéző se
- A hozzászóláshoz be kell jelentkezni
Ami lemaradt: a scriptbe esetleg egy "set -x" parancsot az rsync hívása elé és nézd meg úgy, mi az, amit valóban végrehajt! (mert amint azt tudjuk, a számítógép az utasításaid és nem az elvárásaid szerint működik ;) )
- A hozzászóláshoz be kell jelentkezni
ez jó volt, de ua. Amit bemásoltam amúgy az a kiechózott parancs.
- A hozzászóláshoz be kell jelentkezni
Esetleg megnézném od-vel vagy valami hexa editorral a szkriptet, nem került-e bele oda nem illő, láthatatlan karakter.
- A hozzászóláshoz be kell jelentkezni
Próbáld így:
eval "$CMD"
Most nincs kedvem azon gondolkodni, ez bármiben is különbözik-e attól, mintha leírnád a $CMD-t, mindenesetre az eval, a megfelelően escape-elt idézőjel, aposztrof jól jöhet.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
itt a pont, mondjuk érdekelne a magyarázat is, majd lesz kedvem gondolkodni ezen, majd meglátjuk.
- A hozzászóláshoz be kell jelentkezni
Azért, mert ha jól sejtem mondjuk még az átirányítást is generálod bele a parancsot tartalmazó változóba. Viszont a parancssor feldolgozásának megvan a maga sorrendje - ez egyrészt a balról-jobbra, ellenben vannak olyanok is, hogy mi történik meg előbb: egy változó kihelyettesítése, a joker-karakterek értelmezése, az átirányítás értelmezése, vagy a szóközök feldolgozása, stb.
- A hozzászóláshoz be kell jelentkezni
Szerintem, amikor a $CMD helyettesítése megtörténik, akkor oldaná fel a speciális karaktereket is. Így, hogy azok magában a CMD-ben vannak, már literálisként kerülnek helyettesítésre. Ahhoz, hogy az interpreter a helyettesítést követően újra nekiálljon a string kiértékelésének, kell az eval.
a='echo hello'
$a
hello
a='echo hello >/dev/null'
$a
hello >/dev/null
eval "$a"
Persze, idézőjel nélkül leírva a változót, a helyettesítéskor a szóközök mentén szétesik paraméterekre a string, ezért működik valamennyire az a megoldás, amikor csak a változó nevét írjuk le. De a paraméterek már literálisok, újabb értelmezésre nem kerül sor.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni
Tulajdonképpen logikus. Lásd fentebb.
tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE
- A hozzászóláshoz be kell jelentkezni