BASH - echo "/!/"

BASH - echo "/!/"
« kdy: 30. 12. 2020, 21:13:02 »
Preco toto nefunguje takto
Kód: [Vybrat]
$ echo "/!/"
/!/
$
ale mne takto:
Kód: [Vybrat]
$ echo "/!/"
echo "//usr/local/bin/supertuxkart "
//usr/local/bin/supertuxkart
$ set |grep bin/supertuxkart
_='//usr/local/bin/supertuxkart '
?


mhepp

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 (").

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

Event???

tecka

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.

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


AoK

  • ***
  • 248
    • Zobrazit profil
Re:BASH - echo "/!/"
« Odpověď #5 kdy: 31. 12. 2020, 00:27:42 »
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:
Kód: [Vybrat]
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íň.

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

AoK

  • ***
  • 248
    • Zobrazit profil
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.
« Poslední změna: 31. 12. 2020, 13:54:14 od AoK »

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 ;-)

Re:BASH - echo "/!/"
« Odpověď #9 kdy: 31. 12. 2020, 22:59:58 »
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

  • *****
  • 1 845
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:BASH - echo "/!/"
« Odpověď #10 kdy: 01. 01. 2021, 11:58:21 »
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 /\!/

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

  • *****
  • 1 845
  • porad nemam telo, ale uz mam hlavu... nobody
    • Zobrazit profil
    • E-mail
Re:BASH - echo "/!/"
« Odpověď #12 kdy: 01. 01. 2021, 15:57:17 »
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 /
Kód: [Vybrat]
sed "s/\/\!\//ZaCo/"nebo pouzit misto uvozovek " apostrofy ' a take misto oddelovace sedu / pouzit treba # a je to bez escapovani
Kód: [Vybrat]
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...
« Poslední změna: 01. 01. 2021, 16:01:54 od k3dAR »

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

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.

Re:BASH - echo "/!/"
« Odpověď #14 kdy: 01. 01. 2021, 22:57:35 »
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.
« Poslední změna: 01. 01. 2021, 23:02:46 od FKoudelka »