BASH - echo "/!/"

z_sk

BASH - echo "/!/"
« kdy: 30. 12. 2020, 21:13:02 »
Preco toto nefunguje takto
$ echo "/!/"
/!/
$

ale mne takto:
$ echo "/!/"
echo "//usr/local/bin/supertuxkart "
//usr/local/bin/supertuxkart
$ set |grep bin/supertuxkart
_='//usr/local/bin/supertuxkart '

?


mhepp

  • ***
  • 224
Re:BASH - echo "/!/"
« Odpověď #1 kdy: 30. 12. 2020, 21:28:14 »
Protože ! je speciální znak. Ten musíš escapovat.

Zkus:

echo '/!/'

Apostrofy (') zakazují expanzi řetězce uvnitř, narozdíl od uvozovek (").

z_sk

Re:BASH - echo "/!/"
« Odpověď #2 kdy: 30. 12. 2020, 22:00:00 »
hm,
$ echo "/!/!/"
bash: !/!/: event not found


Event???

tecka

  • ***
  • 185
Re:BASH - echo "/!/"
« Odpověď #3 kdy: 30. 12. 2020, 22:25:35 »
Jo, záznam v historii příkazů je event. Viz History Expansion v manuálové stránce.

z_sk

Re:BASH - echo "/!/"
« Odpověď #4 kdy: 31. 12. 2020, 00:16:53 »
Ok. A na čo to je dobre prakticky?


Re:BASH - echo "/!/"
« Odpověď #5 kdy: 31. 12. 2020, 00:27:42 »
Citace od: debian.plus kdy 31. 12. 2020, 00:16:53
Ok. A na čo to je dobre prakticky?

spustí ti to poslední příkaz z historie podle jeho začátku.

Řekněme, že jsem postupně zadal do terminálu tyhle příkazy, kde si vypíšu obsah adresáře a poté vytvořím podadre:

ls -l
mkdir slozka


A teď mohu zadat !l a sputí se mi z historie výpis složky "ls -l". Takhle to vypadá zbytečné, ale někdy při práci napíšu dlouhý příkaz, abych ho nemusel psát znovu nebo procházet history, napíšu !<zacatek příkazu> a rovnou se mi spustí ten poslední z historie, který takhle začíná.

Tobě to poslední v historii našlo "//usr/local/bin/supertuxkart", tak to tam vložilo. Nic víc, nic míň.

z_sk

Re:BASH - echo "/!/"
« Odpověď #6 kdy: 31. 12. 2020, 10:31:14 »
Asi dobre pre terminal, kde nie su sipky hore/dole. 🤔

Re:BASH - echo "/!/"
« Odpověď #7 kdy: 31. 12. 2020, 13:52:41 »
tohle je rychlejší než využívat šipky, proč bych listoval seznamem, když mohu příkaz spustit rovnou? Vykřičník mi umožní s příkazem pracovat a třeba ho zkopírovat do schránky či uložit do souboru, šipky to sami o sobě neumožní. Často využívám např. "echo !-2 >> commands.sh" pro uložení posledního příkazu do souboru, abych ho mohl použít příště.

Každopádně těch cest je více, je možné si namapovat na klávesy (klidně na šipky) vlastní příkazy přes inputrc.

Začni více pracovat v terminálu a výhody tohoto chování pochopíš, práce s tím je pak obrovsky rychlá, přes terminál jsem násobně rychlejší v častých operacích než kdokoliv, kdo má v ruce myč a musí to někde klidat.

Re:BASH - echo "/!/"
« Odpověď #8 kdy: 31. 12. 2020, 14:39:47 »
nebo si nainstalovat ZSH a plno věcí zautomatizovat ;-) Ale jak jste psal, existuje více způsobů

Na druhou stranu, pro některé lidi je lepší když se Bashi vyhnou, resp. Linuxu a zůstanou u klikacích desktopů když nejsou schopni zjistit, co je ! v Bashi nebo neví co shebang či všechny problémy řeší chmod 777 ;-)

FKoudelka

Re:BASH - echo "/!/"
« Odpověď #9 kdy: 31. 12. 2020, 22:59:58 »
Citace od: mhepp kdy 30. 12. 2020, 21:28:14
Protože ! je speciální znak. Ten musíš escapovat.

Zkus:

echo '/!/'

Apostrofy (') zakazují expanzi řetězce uvnitř, narozdíl od uvozovek (").
Pardon , od kdy se escapuje s / ?
Snad \!      ?

k3dAR

  • *****
  • 3 193
Re:BASH - echo "/!/"
« Odpověď #10 kdy: 01. 01. 2021, 11:58:21 »
Citace od: FKoudelka kdy 31. 12. 2020, 22:59:58
Citace od: mhepp kdy 30. 12. 2020, 21:28:14
Protože ! je speciální znak. Ten musíš escapovat.

Zkus:

echo '/!/'

Apostrofy (') zakazují expanzi řetězce uvnitř, narozdíl od uvozovek (").
Pardon , od kdy se escapuje s / ?
Snad \!      ?
mel to spravne, pro lepsi pochopeni cti "Zkus:" => "Zkus misto escapovani" ;-)
protoze tazatel chtel (dle dotazu) docilit echo znaku /!/ coz lze:
1. s apostrofama (misto tazatelem pouzitych uvozovek)
2. NEBO s escapovanim BEZ uvozovek: echo /\!/

z_sk

Re:BASH - echo "/!/"
« Odpověď #11 kdy: 01. 01. 2021, 12:30:44 »
panove @FKoudelka & @k3dAR, nie neskúšal som escapovať. Nahradzal som v sed v tychtoch " uvodzovách.

k3dAR

  • *****
  • 3 193
Re:BASH - echo "/!/"
« Odpověď #12 kdy: 01. 01. 2021, 15:57:17 »
Citace od: debian.plus kdy 01. 01. 2021, 12:30:44
panove @FKoudelka & @k3dAR, nie neskúšal som escapovať. Nahradzal som v sed v tychtoch " uvodzovách.
tak pokud trvas na " je potreba to escapovat a to nejen ten ! ale i / pokud bys pouzil beznej oddelovac v sedu znak /
sed "s/\/\!\//ZaCo/"
nebo pouzit misto uvozovek " apostrofy ' a take misto oddelovace sedu / pouzit treba # a je to bez escapovani
sed 's#/!/#ZaCo#'

EDIT: jen pozor na to ze ses s ' nejen ze nebude expandovat to /!/ ale zaroven ani pripadne promene ktere bys chtel v nahrazovanem ci nahrazujicim pouzit...

FKoudelka

Re:BASH - echo "/!/"
« Odpověď #13 kdy: 01. 01. 2021, 22:50:29 »

Citace od: k3dAR kdy 01. 01. 2021, 11:58:21
Citace od: FKoudelka kdy 31. 12. 2020, 22:59:58
Citace od: mhepp kdy 30. 12. 2020, 21:28:14
Protože ! je speciální znak. Ten musíš escapovat.

Zkus:

echo '/!/'

Apostrofy (') zakazují expanzi řetězce uvnitř, narozdíl od uvozovek (").
Pardon , od kdy se escapuje s / ?
Snad \!      ?
mel to spravne, pro lepsi pochopeni cti "Zkus:" => "Zkus misto escapovani" ;-)
protoze tazatel chtel (dle dotazu) docilit echo znaku /!/ coz lze:
1. s apostrofama (misto tazatelem pouzitych uvozovek)
2. NEBO s escapovanim BEZ uvozovek: echo /\!/
Jj rozumim, reagoval jsem ciste na mhepp a escape. Doufam ze nejsem mimo, bez klavesnice je to tezky radit.
Btw, memo : Single quota supress the  substitution, Double quota do do the substitution.

FKoudelka

Re:BASH - echo "/!/"
« Odpověď #14 kdy: 01. 01. 2021, 22:57:35 »
Citace od: hurvajs spejbl kdy 31. 12. 2020, 14:39:47
nebo si nainstalovat ZSH a plno věcí zautomatizovat ;-) Ale jak jste psal, existuje více způsobů

Na druhou stranu, pro některé lidi je lepší když se Bashi vyhnou, resp. Linuxu a zůstanou u klikacích desktopů když nejsou schopni zjistit, co je ! v Bashi nebo neví co shebang či všechny problémy řeší chmod 777 ;-)
Já ti nevím, pokrok je pokrok, ale pokud se OP setkává i s legacy systémy, tak je lepší naučit se ten bash. Pokud je to domácí žvýkáni, tak klidně zsh, ale u zákazníka by mohl zažít trapas bez znalosti bash.