Portál AbcLinuxu, 13. května 2025 20:15
cd adresar cd adresar; ll -trten adresar muze byt libovolny, myslela jsem neco jako
sleep 1; ll -tr & cd adresar(tj. aby prikaz ll -tr chvili pockal) diky! T.
zmena () {
cd $1 && ll -tr
sleep 1
}
~/.bashrc
, aby byla vždy k dispozici.
sleep 1; ll -tr & cd adresar
by nejdřív vykonal příkaz sleep(pockal by vterinu) a pak by se provedli prikazy ll -tr & cd adresar
.
Je tedy _jiste_ ze to pomoci aliasu nejde?
Jde to (bash mi tohle vezme): alias cd2='(sleep 1; ll -tr; echo)& cd'
, ale má to nevýhodu, že se mj. objeví zpráva o spuštění procesu v pozadí (a za chvíli o jeho ukončení) a po doběhnutí výpisu se neobnoví prompt (tím myslím, že je o těch x řádek výš).
Mimochodem, i ta funkce se může jmenovat cd
- na ten původní cd
se jde odvolat pomocí něčeho jako command cd
nebo tak nějak.
I potom, co se to uspí na delší dobu (třeba 2s)? Mimochodem, to echo
tam být nemusí, to jsem jenom špatně zkopíroval.
Hups - to se mi nepovedlo - teď jsem to znovu zkoušel a vylistuje to skutečně ten starý (předtím jsem měl v obou podobně pojmenované soubory). Takže to asi aliasem nepůjde (asi určitě, protože ten parametr potřebuji použít 2× nebo někde uprostřed, což alias neumí), ale tou funkcí určitě ano. Omlouvám se.
cd
mění pracovní adresář shellu, ale v tu dobu už je obsah těch kulatých závorek spuštěn jako samostatný proces se svým vlastním pracovním adresářem. Pokud chcete něco jiného, pak bude asi lepší, když napíšete, jak přesně se to má chovat.
ll -tr
a to tvůj zápis aliasu neprovede. Alias provede příkaz ll -tr
na aktuálním pracovním adresáři a současně změní pracovní adresář.
function cdls { cd "$1" ls -l }
mi funguje.
cdls ..
'?
jmeno_funkce parametr1 parametr2
...
Např: cdls /var/
Přesně tak. Viz též bash(1)
:
There is no mechanism for using arguments in the replacement text. If arguments are needed, a shell function should be used (see FUNCTIONS below).
...
For almost every purpose, aliases are superseded by shell functions.
1. Je tedy _jiste_ ze to pomoci aliasu nejde?Mrkni na shopt expand_aliases.
cd
?
Napíšete si do .bashrc
funkci pokud ji chcete volat příkazem cd
, uděláte si na ni alias
cd2 () { cd $1 && ll -tr } alias cd=cd2
bash(1)
, co se tam píše o proměnné CDPATH
.
cd
bez parametru a cd
s prázdným parametrem.
alias vypis='ls -tlr'
a potom spustim takto:
vypis /tmp
ak potom dostanem vypis adresara /tmp.
cd
samotné, tak by som to robil cez prompt. Existuje Bash-Prompt-HOWTO. V obsluhe prompt-u by som porovnal $OLDPWD a $PWD a ak sa líšia zavolal ls
.
PROMPT_COMMAND='[ "$OLDPWD" = "$PWD" ] || ls -tr'
$OLDPWD
se od $PWD
liší víceméně pořád, takže to vám bude ls -tr
dělat permanentně.
PROMPT_COMMAND='[ "$OLDPWD" = "$PWD" ] || ls -tr; cd .'
cd -
oboje by sa dalo vyriešiť premennou, alias cd nastaví, prompt_command zruší
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.