GNU/Linux >> Znalost Linux >  >> Linux

Jak mohu použít Bash jako přihlašovací shell, když mi Sysadmin odmítne dovolit to změnit?

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 jako ssh 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

Linux
  1. Jak používat šifrované heslo ve skriptu Linux Bash Shell

  2. Jak změnit Cron Shell (sh to Bash)?

  3. Tipy pro Unix Shell:Změňte přihlašovací shell z Bash na jiné

  1. CentOS / RHEL :Jak změnit přihlašovací shell uživatele

  2. Jak mohu najít verzi Fedory, kterou používám?

  3. Jak mohu v Bash používat společně příkazy watch a jobs?

  1. Jak změnit výchozí prostředí v Linuxu

  2. Jak změnit výchozí shell v Linuxu

  3. Jak může bash skript znát adresář, ve kterém je nainstalován, když je zdrojem . operátor?