====== Přechod z tcsh na bash ====== ===== Odkazy ===== * [[http://en.wikipedia.org/wiki/Comparison_of_computer_shells]] ===== 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''