Parancs csere, luta infos.

Hali,

Tudna valaki segiteni hogy ha van egy parancs:

"go server" azt hogy lehetne ugy elintezni hogy ugy vegye be hogy "ssh %server" ??

% fontos hogy a file elott legyen, kulonben nem megy.

aliasokkal probalkoztam de nem jott ossze.

Hozzászólások


joco@joco:~$ function go { echo ssh %$1; }
joco@joco:~$ go server
ssh %server

Echo-t vedd ki. Amúgy a shellhez hülye vagyok, nekem ez így bash-ben megy, de gondolom 100-féle shellben 200-féle szintaxis van függvény írására.

Idézet a bash man-jából (csak hogy értsd, miért nem ment) :

"There is no mechanism for using arguments in the replacement text. If arguments are needed, a shell function should be used (see FUNCTIONS below)."

Ugyanis az alias egy teljesen egyszerű szöveges cserét hajt végre, ahol a parancs első szavát cseréli ki az aliasként definiált értékre. E miatt aztán ez a trivialitás nem jó:

$ alias go='echo ssh \%'
$ go server
ssh % server
$

Mint látható, a parancsot az első paramétertől elválasztó szóköz megmarad a csere után is.

Ui: mondjuk ha csh-t használnál, abban ugyan nincs shell-függvény, de abban a shellben az alias-ban van lehetőség a paraméterek helyettesítésére az un. "history substitution" segítségével:

csh% alias go 'echo ssh \%!^'
csh% go server
ssh %server
csh%

(A !^ azt jelenti, hogy a legutolsó parancs mindenestül, kivéve a parancsszót.)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

Ja igazad van, \! a helyes. Olyan ritkán használok csh-t (aktívan kb. 20 éve utoljára, azóta csak ilyen példákban), hogy minden alkalommal figyelmeztetnem kell magamat, hogy ott még idézőjelen belül is megy a history hivatkozás helyettesítése. (Ami amúgy viszonylag logikus.)

És valóban, ha több paraméter kellene, akkor \!\* lenne a megfelelő hivatkozás az utolsó parancs összes paraméterére (mert ugye a !^ az csak a paraméterek "eleje").

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?