Systémový správce unixu, kde pracuji, se zdráhá dát mi přístup ke změně přihlašovacího prostředí z ksh
na bash
. Poskytl různé výmluvy, nejvtipnější je, že od té doby, co píší všechny své skripty pro ksh
nebudou fungovat, když se je pokusím spustit. Nevím, kde bere ty nápady, ale protože ho nemůžu přesvědčit, mám nějakou alternativu?
(chsh
je na těchto počítačích nainstalováno, ale pro přihlášení používáme páry klíčů veřejné/soukromé a nemám žádné heslo, takže když chsh
vyzve mě k zadání hesla Nemám mu co dát. )
Přijatá odpověď:
Když se přihlásíte, soubor ~/.profile
je čteno přihlašovacím shellem (ksh pro vás). Můžete dát tomuto přihlašovacímu shellu pokyn, aby se nahradil bashem. Měli byste přijmout určitá opatření:
- Přihlašovací shell nahraďte pouze v případě, že je interaktivní. To je důležité:jinak nemusí přihlášení v grafickém režimu fungovat (toto závisí na systému:některé, ale ne všechny systémy čtou
~/.profile
při přihlašování přes xdm nebo podobně) a idiomy jakossh foo '. ~/.profile; mycommand'
selže. - Zkontrolujte, zda je bash k dispozici, abyste se mohli přihlásit, pokud tam spustitelný soubor z nějakého důvodu není.
Máte na výběr, zda spustit bash jako přihlašovací shell nebo ne. Jediný hlavní rozdíl v tom, že z něj uděláte přihlašovací shell, je ten, že načte ~/.bash_profile
nebo ~/.profile
. Pokud tedy spouštíte bash jako přihlašovací shell, buďte velmi opatrní, abyste měli ~/.bash_profile
nebo dejte pozor, abyste nespouštěli bash rekurzivně z ~/.profile
. ~/.profile
nemá žádnou skutečnou výhodu provádí bash spíše než ksh, takže bych to doporučoval nedělat.
Nastavte také SHELL
proměnnou prostředí na bash, takže programy, jako jsou emulátory terminálu, vyvolají tento shell.
Zde je kód pro přepnutí na bash. Umístěte jej na konec ~/.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