GNU/Linux >> Znalost Linux >  >> Linux

Jaké je správné umístění proměnné PS1 Shell?

PS1 proměnná prostředí by měl být nastaven na ~/.bashrc pro bash shell, protože to je inicializační soubor, který se čte pro interaktivní shellové relace.

Všimněte si, že tato proměnná je proměnná shellu , nikoli proměnná prostředí (nedává smysl nechat podřízené procesy zdědit její hodnotu a používá ji pouze aktuální shell). Proto není nutné jej exportovat pomocí export .

Související:

  • Jaký je účel .bashrc a jak funguje?

Neměli byste spouštět bash z libovolného spouštěcího souboru shellu. Spuštění konkrétního shellu z ~/.profile (nebo odpovídající soubor související s vaším přihlašovacím shellem) může být zaručen, pokud vám systém, na kterém běžíte, neumožňuje změnit váš přihlašovací shell. Je třeba dávat pozor, aby ne spusťte druhý shell, pokud je to shell, který již spouští soubor, nebo můžete skončit v nekonečné smyčce.

exec kód, který přidáte do ~/.bash_profile by nikdy neměl být potřeba. Předpokládám, že je to způsob, jak získat ~/.bashrc k analýze (spustí interaktivní shell a interaktivní bash shelly čtou ~/.bashrc ). Lepší způsob, jak to udělat, by bylo nechat jeden ze souborů zdroj druhého, například pomocí tohoto v ~/.bash_profile :

if [[ -f $HOME/.bashrc ]]; then
    source "$HOME/.bashrc"
fi

Poté nastavte PS1 v ~/.bashrc (nemělo by být nutné se dotýkat HOME nebo TERM ).

Další věc, kterou příkaz dělá, je vyčistit všechny ostatní proměnné prostředí pomocí env -i . Pokud nemáte velmi konkrétní důvody abyste to udělali, neměli byste to dělat ze svých běžných spouštěcích souborů shellu.


Abych citoval z manuálové stránky bash:

When  bash is invoked as an interactive login shell, or as a non-interactive
shell with the --login option, it first reads and executes commands from the
file  /etc/profile,  if that file exists.  After reading that file, it looks
for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads
and  executes  commands from the first one that exists and is readable.  The
--noprofile option may be used when the shell is  started  to  inhibit  this
behavior.

When  a  login  shell  exits, bash reads and executes commands from the file
~/.bash_logout, if it exists.

When an interactive shell that is not a login shell is started,  bash  reads
and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if these files
exist.  This may be inhibited by using the --norc option.  The --rcfile file
option  will  force  bash  to read and execute commands from file instead of
/etc/bash.bashrc and ~/.bashrc.

Velmi tedy záleží na tom, jak shell spustíte.

  • Pokud chcete mít svůj PS1 aktivní ve všech přihlášeních shelly (např. přes su - <user> nebo při vzdáleném přihlášení přes ssh ), vložte jej do profilu .
  • Pokud chcete mít svůj PS1 aktivní ve všech nepřihlášených shelly (např. jednoduché otevření jiného terminálu ve vašem desktopovém prostředí), vložte do bashrc .
  • Pokud ji chcete mít aktivní v obou případech, budete ji muset vložit do obou souborů nebo (což některé verze Linuxu dělají alespoň v případě celosystémového /etc/profile a /etc/bash.bashrc ), zdroj .bashrc v .profilu .

PS1 by měl být v .bashrc . Můžete to také nastavit v .profile .

Zdroje Debianu .bashrc odtud:

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

Linux
  1. Variabilní rozsah pro skripty bash shell a funkce ve skriptu

  2. Jaké je výchozí kořenové heslo pro MySQL 5.7

  3. Jaké je konvenční umístění instalace aplikací v Linuxu?

  1. Jaký je důvod, proč rmdir(1) a rm(1) koexistují?

  2. Jaký je nejlepší způsob, jak nastavit proměnnou prostředí v .bashrc?

  3. Co je výchozí shell Busybox?

  1. Co pro vás může udělat shell dotfile

  2. Jak přiřadit výstup příkazu proměnné shellu?

  3. Zdroje pro programování Portable Shell?