Po zalogowaniu plik ~/.profile
jest odczytywany przez powłokę logowania (ksh dla ciebie). Możesz poinstruować tę powłokę logowania, aby zastąpiła się bash. Powinieneś podjąć pewne środki ostrożności:
- Wymień powłokę logowania tylko, jeśli jest interaktywna. Jest to ważne: w przeciwnym razie logowanie w trybie graficznym może nie działać (jest to zależne od systemu: niektóre, ale nie wszystkie systemy czytają
~/.profile
podczas logowania przez xdm lub podobny), a idiomy takie jak ssh foo '. ~/.profile; mycommand'
nie powiedzie się.
- Sprawdź, czy bash jest dostępny, abyś mógł nadal się logować, jeśli z jakiegoś powodu nie ma pliku wykonywalnego.
Masz wybór, czy uruchomić bash jako powłokę logowania, czy nie. Jedyną zasadniczą różnicą w tworzeniu powłoki logowania jest to, że się załaduje ~/.bash_profile
lub ~/.profile
. Więc jeśli uruchamiasz bash jako powłokę logowania, bądź bardzo ostrożny, aby mieć ~/.bash_profile
lub staraj się nie uruchamiać bash rekurencyjnie ~/.profile
. Nie ma żadnej realnej korzyści z ~/.profile
wykonania przez bash zamiast ksh, więc polecam nie robić tego.
Ustaw także SHELL
zmienną środowiskową na bash, aby programy takie jak emulatory terminali wywoływały tę powłokę.
Oto kod, aby przełączyć się na bash. Połóż to na końcu ~/.profile
.
case $- in
*i*)
# Interactive session. Try switching to bash.
if [ -z "$BASH" ]; then # do nothing if running under bash already
bash=$(command -v bash)
if [ -x "$bash" ]; then
export SHELL="$bash"
exec "$bash"
fi
fi
esac
Gilles „SO- przestań być zły”
źródło
.profile
działa tylko w przypadku powłoki logowania (w razie potrzeby OP). Korzystam z połączenia pulpitu zdalnego systemu Windows 10, aby zalogować się do stacji roboczej Linux, a następnie otworzyć terminal w gnome. Chcę,zsh
dopóki mój sysadmin mi dabash
. W takim przypadku muszę dodać fragment.bashrc
zamiast.profile
.Jest to trochę kludgey, ale możesz spowodować,
bash
że będziesz powłoką, której używasz podczas logowania, tworząc.profile
plik w katalogu domowym, zawierającySpowoduje to, że
ksh
sesja zostanie zastąpionabash
sesją. Nie będziesz musiał wpisywaćexit
(lub^D
) dwa razy, tak jak w przypadku ręcznego rozpoczynania nowejbash
sesji przy każdym logowaniu. I pisaniezwróci nawet ścieżkę do
bash
.źródło
exec bash -l
.type
jest zalecany zamiastwhich
.bash
odczyt również nie.profile
wygeneruje nieskończonej pętli? Zgadzam się, że coś jest zgodne zexec bash
tym, czego chcesz, ale musisz upewnić się, że robisz to tylko dla swojego loginu ksh, więc niektóre instrukcje if są wymagane!~/.bash_profile
lub~/.bash_login
Do odpowiedzi Gilesa należy dodać flagę -l podczas wykonywania bash, aby wszelkie skrypty profilu logowania były pozyskiwane w nowej powłoce bash. (Na przykład wszystko w /etc/profile.d/ na RHEL). Skrypt powinien wtedy być:
źródło
-l
opcję? Używam tego od miesięcy bez tego bez żadnych problemów.Odpowiedź na
csh/tcsh
zainspirowaną jedną z najlepszych głosowanych przez @Gilles jestźródło
Solaris:
źródło