Быстрая настройка: как обнаружить, когда нет никакого tty

Это похоже на ошибку. Я предлагаю, чтобы Вы заполнили отчет об ошибках.

5
задан 23 December 2009 в 20:31
4 ответа

tput команды оценены в то время, когда присвоение на PS1 сделано. Так как файлы запуска обрабатываются, когда ssh сессия запускается, присвоение сделано даже при том, что Ваша сессия не интерактивная. Можно протестировать на это и только сделать присвоение при фактическом запуске интерактивной сессии.

if [[ $- =~ i ]]
then
    # set PS1 using tput
else
    # set a plain PS1 (or use hard-coded escape sequences)
fi
1
ответ дан 3 December 2019 в 01:12

Поместите следующее в начале/etc/bashrc

[ -z "$PS1" ] && return
3
ответ дан 3 December 2019 в 01:12
  • 1
    +1 это, кажется, техника много использования дистрибутивов в запасе bashrc –  freiheit 24 December 2009 в 05:02
  • 2
    Как это, как предполагается, работает? Переменная PS1 doesn' t существуют, когда оболочка не является интерактивной? –  GetFree 26 December 2009 в 02:41
  • 3
    Да. Это установлено по умолчанию для интерактивных оболочек, и это не для неинтерактивных. –  cstamas 26 December 2009 в 03:05

Существует удар встроенный тест для TTY. Я забываю, когда это было добавлено, 3.0? Я полагаю, что это является относительно новым. Я использую его в сценариях, где мне нужно другое поведение, когда это выполняется от крона, или пользователь выполняет его непосредственно.

if [ -t 0 ]; then
   echo "I'm a TTY"
fi
5
ответ дан 3 December 2019 в 01:12

Вот описание всех 3 методов выполнения этого:
http://tldp.org/LDP/abs/html/intandnonint.html

1
ответ дан 3 December 2019 в 01:12

Теги

Похожие вопросы