Puncte:0

verificarea shell-ului de conectare nu funcționează în .profile

drapel vn

Ubuntu 20.04, 5.8.0-63-generic, gnome-shell, gdm3

Shell-ul meu de conectare este setat la /bin/sh

și am această linie în mine $HOME/.profil fişier:

shopt -q login_shell > /dev/null 2>&1 || export SHELL=/bin/zsh

Acum din intelesul meu export SHELL=/bin/zsh nu ar trebui executat la autentificare, nu? pentru că este un shell de conectare deci shopt -q login_shell > /dev/null 2>&1 este adevarat.

Dar primesc $SHELL ca /bin/zsh după conectare.

De fapt, setarea $SHELL nu este preocuparea mea, vreau să folosesc shopt -q login_shell > /dev/null 2>&1 în logica .zshrc. Trebuie să lucrez pentru a rula selectiv lucrurile în shell non-login.

Nu pot să-mi dau seama ce nu se întâmplă. Nevoie de ajutor!

Editați | ×:

Shopt nu este o comandă /bin/sh. Dar chiar și schimbarea shell-ului de conectare în /bin/bash nu ajută.

Puncte:1
drapel hr

shopt nu este o comandă validă în POSIX SH coajă (nici zsh, care folosește setopt/dezinstalat), așa că se va produce o eroare - făcând testul să revină necondiționat diferit de zero:

$ bash -lc 'shopt -q login_shell; echo $?'

0

dar

$ sh -lc 'shopt -q login_shell; echo $?'
sh: 1: shopt: nu a fost găsit
127

și

$ zsh -lc 'shopt -q login_shell; echo $?'
zsh:1: comanda nu a fost găsită: shopt
127

De cand ~/.profil (precum și /etc/profile, plus fișierele din /etc/profile.d pe care îl sursă) poate fi citit de alte shell-uri, cea mai bună practică este să-l mențineți compatibil cu POSIX. AFAIK modalitatea POSIX de a verifica dacă există un shell de conectare este de a testa dacă $0 începe cu a - personaj ex.

caz $0 in 
  -*) echo "shell de conectare"
   ;; 
   *) echo "shell non-login"
   ;;
esac
Sayan Dey avatar
drapel vn
Corect Mulțumesc. Dar chiar și schimbarea în /bin/bash nu funcționează. Ce să fac dacă vreau să rulez ceva doar în timpul autentificării. Am editat întrebarea.
drapel hr
@SayanDey Nici nu cred că `shopt` este legal în `zsh` - este `setopt`/`unsetopt`.IIRC modalitatea *portabilă* de a testa un shell de conectare este de a verifica dacă primul caracter al lui `$0` este un `-`. Vezi editarea.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.