Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: debian.plus 30. 12. 2020, 21:13:02

Název: BASH - echo "/!/"
Přispěvatel: debian.plus 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 '
?
Název: Re:BASH - echo "/!/"
Přispěvatel: mhepp 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 (").
Název: Re:BASH - echo "/!/"
Přispěvatel: debian.plus 30. 12. 2020, 22:00:00
hm,
Kód: [Vybrat]
$ echo "/!/!/"
bash: !/!/: event not found

Event???
Název: Re:BASH - echo "/!/"
Přispěvatel: tecka 30. 12. 2020, 22:25:35
Jo, záznam v historii příkazů je event. Viz History Expansion v manuálové stránce.
Název: Re:BASH - echo "/!/"
Přispěvatel: debian.plus 31. 12. 2020, 00:16:53
Ok. A na čo to je dobre prakticky?
Název: Re:BASH - echo "/!/"
Přispěvatel: AoK 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íň.
Název: Re:BASH - echo "/!/"
Přispěvatel: debian.plus 31. 12. 2020, 10:31:14
Asi dobre pre terminal, kde nie su sipky hore/dole. 🤔
Název: Re:BASH - echo "/!/"
Přispěvatel: AoK 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.
Název: Re:BASH - echo "/!/"
Přispěvatel: hurvajs spejbl 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 ;-)
Název: Re:BASH - echo "/!/"
Přispěvatel: FKoudelka 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 \!      ?
Název: Re:BASH - echo "/!/"
Přispěvatel: k3dAR 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 /\!/
Název: Re:BASH - echo "/!/"
Přispěvatel: debian.plus 01. 01. 2021, 12:30:44
panove @FKoudelka & @k3dAR, nie neskúšal som escapovať. Nahradzal som v sed v tychtoch " uvodzovách.
Název: Re:BASH - echo "/!/"
Přispěvatel: k3dAR 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...
Název: Re:BASH - echo "/!/"
Přispěvatel: FKoudelka 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.
Název: Re:BASH - echo "/!/"
Přispěvatel: FKoudelka 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.
Název: Re:BASH - echo "/!/"
Přispěvatel: registrovany_ava 02. 01. 2021, 11:43:42
Ok. A na čo to je dobre prakticky?

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

Doplňuji, že se často hodí vyhledávání v historii příkazů přes Ctrl-R.
Název: Re:BASH - echo "/!/"
Přispěvatel: debian.plus 05. 01. 2021, 12:33:42
Ok. A na čo to je dobre prakticky?

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

Doplňuji, že se často hodí vyhledávání v historii příkazů přes Ctrl-R.

alebo aj prikaz history (a la cat .bash_history s cislovanim riadkov)
Název: Re:BASH - echo "/!/"
Přispěvatel: honzik1111 07. 01. 2021, 13:32:00
alebo aj prikaz history (a la cat .bash_history s cislovanim riadkov)

Když už jsme se dostali až sem, tak
Kód: [Vybrat]
history | grep cast_prikazu_co_potrebuji

Případně rovnou spouštět přes "vykřičník číslo" (funguje univerzálně, nebo jen v BASH?)
Kód: [Vybrat]
!123 # misto 123 konkretni cislo z predchoziho seznamu