Используйте .bashrc, не повреждаясь sftp

панель управления> электропитание (или можно щелкнуть правой кнопкой по рабочему столу> избранные свойства> экранная заставка> питание),

Можно скорректировать все параметры питания отсюда. Я также отключаю, в спящем режиме, в то время как я нахожусь в области.

20
задан 21 November 2019 в 16:31
6 ответов

Попробуйте сделать это вместо этого

if [ "$SSH_TTY" ]
then
   source .bashc_real
fi
23
ответ дан 2 December 2019 в 20:07

Мне нравятся некоторые из других решений, упомянутых здесь лучше, но я думал, что вывожу решение, которое я в настоящее время использую на своем ударе и csh VMs для предотвращения разъединений SFTP, должных повторить команды в моих сценариях запуска, на всякий случай любой находит информацию полезной.

В Bash:

if [ $TERM == "xterm" ] || [ $TERM == "xterm-256color" ]; then
  echo "Xterm display identified: echo enabled"
  echo_disable="0"
else
  echo_disable="1"
fi

# Use the following for all subsequent echo commands
if [ $echo_disable == 0 ]; then
 echo "Safe to display on Xterm"
fi

В csh:

if ($TERM == "xterm") then
  echo "Xterm display identified: echo enabled"
  set echo_disable = "0"
else
  set echo_disable = "1"
endif

# Use the following for all subsequent echo commands
if !( "$echo_disable" ) echo "Safe to display on Xterm"

Это - немного грубая сила, но это действительно работает.

0
ответ дан 2 December 2019 в 20:07

Вот первые строки моего (значения по умолчанию) .bashrc файл:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

проверка на интерактивную сессию старается не портить с SCP, SFTP или ssh remote-host command режим.

Без этого, если Ваш файл .bashrc использует echo или некоторая другая печать материала на stdout, можно получить этот вид ошибок:

  • SFTP: Received message too long 168435779
  • SCP: protocol error: unexpected <newline>
0
ответ дан 2 December 2019 в 20:07

Ответ Майка, вероятно, сработает. Но стоит отметить, что вы можете выполнить это, тщательно выбрав, в какие файлы запуска следует поместить подробный материал. Из справочной страницы bash:

Когда bash вызывается как интерактивная оболочка входа или как неинтерактивная оболочка с --login, сначала он считывает и выполняет команды из файла / etc / profile, если этот файл существует. После чтения этого файла он ищет ~ / .bash_profile, ~ / .bash_login и ~ / .profile в указанном порядке, а также читает и выполняет команды из первого, существующего и доступного для чтения. Параметр --noprofile может использоваться при запуске оболочки, чтобы запретить такое поведение.

Когда запускается интерактивная оболочка, которая не является оболочкой входа в систему, bash читает и выполняет команды из ~ / .bashrc, если этот файл существует. Это может быть запрещается с помощью параметра --norc. Параметр файла --rcfile заставит bash для чтения и выполнения команд из файла вместо ~ / .bashrc.

Инструменты sftp / scp запускают интерактивную оболочку без входа в систему, поэтому будет получен .bashrc. Многие дистрибутивы исходят из .bashrc из .bash_profile или наоборот, так что это может сбивать с толку. Хороший трюк для проверки чистоты вашей среды входа в систему - это использовать ssh с помощью команды, которая имитирует тот же способ подключения scp / sftp. Например: ssh myhost / bin / true точно покажет вам, что scp / sftp видит при подключении.

Простая демонстрация:

insyte@mazer:~$ echo "echo Hello from .profile" > .profile
insyte@mazer:~$ echo "echo Hello from .bashrc" > .bashrc

sazerac:~ insyte$ ssh mazer /bin/true
Hello from .bashrc
sazerac:~ insyte$

insyte@mazer:~$ rm .bashrc

sazerac:~ insyte$ ssh mazer /bin/true
sazerac:~ insyte$

Первый тест вызовет scp / sftp / rsync и т. Д. сломать. Вторая версия будет работать нормально.

17
ответ дан 2 December 2019 в 20:07

Если вы используете csh:

if ($?prompt)
  ... interactive stuff ...

И если это bash:

if [[ $- == *i* ]]; then
  ... interactive stuff ...
fi

или, альтернативно, используете регулярные выражения bash:

if [[ $- =~ i ]]; then
  ... interactive stuff ...
fi

Эти строки должны предшествовать строкам, в которых вы выводите / выводите что-то в ответ .

3
ответ дан 2 December 2019 в 20:07

Решение Майка тоже сработало для меня. Но поскольку моя оболочка по умолчанию - TCSH, мне пришлось немного отредактировать исправление следующим образом (в .tcshrc):

if ( $?SSH_TTY ) then
    exec /bin/bash
endif

Просто подумал, что поделюсь всем для всеобщего блага.

1
ответ дан 2 December 2019 в 20:07

Теги

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