GNU/Linux >> Znalost Linux >  >> Linux

Jak napsat automaticky generovaný skript Shell do /etc/profile?

Slyšel jsem přes grapevine, že soubory v /etc/profile budou automaticky získávány pomocí bash po přihlášení?

Zkusil jsem napsat něco jednoduchého do /etc/profile:

 echo "echo 'foo'" > /etc/profile/foo.sh

ale mám tuto zvláštní chybu:

bash: /etc/profile/foo.sh: Not a directory

existuje správný způsob, jak to udělat?

Přijatá odpověď:

/etc/profile je soubor. Proto došlo k chybě při pokusu o vytvoření /etc/profile/foo.sh .

/etc/profile.d je adresář, na který myslíte. Skripty tam umístěné se získávají při přihlášení. Ve vašem příkladu byste chtěli vytvořit /etc/profile.d/foo.sh .

Logika skriptu za tím a jak je to vtaženo, můžete vidět níže. Podobný kód je v /etc/profile , /etc/bashrc , /etc/csh.cshrc a /etc/csh.login .

$ grep -A 8 ^for.*profile.d /etc/profile
for i in /etc/profile.d/*.sh /etc/profile.d/sh.local ; do
    if [ -r "$i" ]; then
        if [ "${-#*i}" != "$-" ]; then
            . "$i"
        else
            . "$i" >/dev/null
        fi
    fi
done
$

Příklad vytvoření a vyvolání takového skriptu:

# echo id >/etc/profile.d/foo.sh
# su - steve
Last login: Sat Jun 23 21:44:41 UTC 2018 on pts/0
uid=1000(steve) gid=1001(steve) groups=1001(steve),4(adm),39(video),1000(google-sudoers) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
$

Více informací na Co dělají skripty v /etc/profile.d?


Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Rozdíl mezi ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …?

  3. Určení cesty ke zdrojovému skriptu Shell?

  1. Jak se aktualizuje /etc/motd?

  2. CentOS / RHEL :Jak obnovit ze smazaného souboru /etc/passwd

  3. Jak automaticky restartovat proces na pozadí linuxu, pokud selže?

  1. Jak zahrnout všechny soubory z adresáře do skriptu shellu (v tomto případě /etc/init.d/iptables)

  2. Jak mohu vrátit chmod v adresáři etc?

  3. Jak nastavit /etc/issues, aby zobrazoval IP adresu pro eth0