Table of Contents
Přechod z tcsh na bash
Odkazy
Syntaxe
Na co dát pozor při psaní skriptů:
Proměnné
tcsh:
setenv VARIABLE value
bash:
export VARIABLE=value
Přesměrování výstupu
tcsh:
( command > x.out ) >& x.err
bash:
command > x.out 2> x.err
Podmínky a smyčky
Konstrukce, které řídí běh programu, mají v obou shellech odlišnou syntaxi.
tcsh:
foreach i (apple pear orange) echo cp ${i}s.txt my_$i.txt end if (-f file.txt) then echo 'Oh yes!' endif
bash:
for i in apple pear orange do echo cp ${i}s.txt my_$i.txt done if [[ -f file.txt ]] ; then echo 'Oh yes!' fi
Nevyřešené problémy
- V bashi mi nefungoval příkaz alias. Čím ho nahradím?
- alias je builtin, ten by fungovat opravdu měl (např.
alias ls='ls -F –color=au'
)
- V tcsh jsem zvyklý, že ALT+P mi v historii projde příkazy, které začínají stejně, jako to, co už jsem napsal na aktuální příkazový řádek. Jak se to udělá v bashi?
- v
.inputrc
si na nějakou klávesu nabinduješhistory-search-backward
, myslím, že defaultně to nikde není
- Chci, aby můj prompt byl v tvaru
9:05 zen:/ha/home/zeman>
. V tcsh mi trvalo několik týdnů, než jsem přišel na to, jak to udělat, ale od té doby už to spokojeně používám přes 10 let. V bashi to chci určitě stejně.- Stačí nastavit proměnnou
PS1
, zřejmě na něco jako“\A ${HOSTNAME%%.*}:\w>”
- S tím souvisí, že
pwd
se chová jinak v tcsh a jinak v bashi. V tcsh se dozvím skutečnou cestu (tj. všelijaké symbolické linky jsou odmaskované), například vidím, že/home/zeman
ve skutečnosti vede na/ha/home/zeman
. Pwd v bashi mi ale pořád říká/home/zeman
. Nejraději bych uměl na požádání vyvolat kterékoli z těchto chování, ale rozhodně bych rád měl nějaký způsob, jak skutečnou cestu zjistit.readlink -f