Fórum Root.cz

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

Název: BASH - echo "/!/"
Přispěvatel: z_sk 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 '

?
Název: Re:BASH - echo "/!/"
Přispěvatel: 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 (").
Název: Re:BASH - echo "/!/"
Přispěvatel: z_sk kdy 30. 12. 2020, 22:00:00
hm,
$ echo "/!/!/"
bash: !/!/: event not found


Event???
Název: Re:BASH - echo "/!/"
Přispěvatel: tecka kdy 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: z_sk kdy 31. 12. 2020, 00:16:53
Ok. A na čo to je dobre prakticky?
Název: Re:BASH - echo "/!/"
Přispěvatel: Exceptions 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íň.
Název: Re:BASH - echo "/!/"
Přispěvatel: z_sk kdy 31. 12. 2020, 10:31:14
Asi dobre pre terminal, kde nie su sipky hore/dole. 🤔
Název: Re:BASH - echo "/!/"
Přispěvatel: Exceptions 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.
Název: Re:BASH - echo "/!/"
Přispěvatel: 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 ;-)
Název: Re:BASH - echo "/!/"
Přispěvatel: 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 \!      ?
Název: Re:BASH - echo "/!/"
Přispěvatel: 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 /\!/
Název: Re:BASH - echo "/!/"
Přispěvatel: z_sk kdy 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 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...
Název: Re:BASH - echo "/!/"
Přispěvatel: FKoudelka 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.
Název: Re:BASH - echo "/!/"
Přispěvatel: FKoudelka 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.
Název: Re:BASH - echo "/!/"
Přispěvatel: registrovany_ava kdy 02. 01. 2021, 11:43:42
Citace od: AoK 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.
...

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: z_sk kdy 05. 01. 2021, 12:33:42
Citace od: registrovany_ava kdy 02. 01. 2021, 11:43:42
Citace od: AoK 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.
...

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 kdy 07. 01. 2021, 13:32:00
Citace od: debian.plus kdy 05. 01. 2021, 12:33:42
alebo aj prikaz history (a la cat .bash_history s cislovanim riadkov)

Když už jsme se dostali až sem, tak

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

!123 # misto 123 konkretni cislo z predchoziho seznamu