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 '
?
Protože ! je speciální znak. Ten musíš escapovat.
Zkus:
echo '/!/'
Apostrofy (') zakazují expanzi řetězce uvnitř, narozdíl od uvozovek (").
hm,
$ echo "/!/!/"
bash: !/!/: event not found
Event???
Jo, záznam v historii příkazů je event. Viz History Expansion v manuálové stránce.
Ok. A na čo to je dobre prakticky?
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íň.
Asi dobre pre terminal, kde nie su sipky hore/dole. 🤔
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.
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 ;-)
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 \! ?
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 /\!/
panove @FKoudelka & @k3dAR, nie neskúšal som escapovať. Nahradzal som v sed v tychtoch " uvodzovách.
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...
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.
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.
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.
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)
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