Por que o / etc / profile verifica PS1 em vez do flag -i em $ -

0

Eu conheço duas maneiras de testar se um shell é interativo,

[[ $- == *i* ]] && echo "-i option flag indicates interactive"

[ -n "$PS1" ] && echo "prompt is set"

Eu li que a verificação da opção i é mais confiável, o que faz sentido, já que é um indicador explícito de interatividade.

Mas quando olho nos arquivos de inicialização do meu sistema (por exemplo, /etc/profile , /etc/bash.bashrc ), eles verificam PS1 . Estou executando o Ubuntu. Eu não sei como isso é específico da plataforma.

Eu estou querendo saber se isso significa:

  • os autores dos arquivos de inicialização não são tão habilidosos quanto assumi
  • PS1 é confiável o suficiente neste contexto
  • PS1 é confiável o suficiente em geral, e eu estou pensando demais
por ivan 18.10.2017 / 14:13

1 resposta

1

No meu sistema Ubuntu 16.04, este é o check in /etc/profile :

if [ "$PS1" ]; then
  if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
    # The file bash.bashrc already sets the default PS1.
    # PS1='\h:\w\$ '
    if [ -f /etc/bash.bashrc ]; then
      . /etc/bash.bashrc
    fi
  else
    if [ "'id -u'" -eq 0 ]; then
      PS1='# '
    else
      PS1='$ '
    fi
  fi
fi

... o que me parece mais preocupante é definir PS1 (e não controlar o comportamento do resto do arquivo rc). Não vejo como testar o -i ajudaria nisso.

    
por 18.10.2017 / 14:26