Я регулярно использую WinSCP для передачи нескольких файлов на свой персональный сервер. Однако недавно я испытал печально известную ошибку "неверная длина пакета" из-за одного из моих эхо-операторов, находящихся в файле .bashrc. Поэтому в отношении этого: ошибка коррупции sftp я хотел бы спросить следующее:

Почему система жаловалась на выражение echo (или что-то, что вызывает ошибку), находящееся в моем файле .bashrc, а не в моем .bash_profile?

..если sftp является своего рода подпроцессом, порождаемым сервером ssh, как показано в приведенной выше ссылке, не должен ли он сначала проанализировать файл .bash_profile и пожаловаться на свои собственные операторы echo?

заранее спасибо

2 ответа2

2

Я использую следующую строку (две с комментариями) вверху моего .bashrc, он просто прерывается, если это не интерактивная оболочка:

# if we're not an interactive shell, do nothing
[ -z "$PS1" ] && return

Я полагаю, если вы хотите длинную форму:

# if we're not an interactive shell, do nothing
if [ -z "$PS1" ]; then
    return
fi

Это уменьшает потребность в файле .bashrc_profile , поскольку .bashrc меняет свою реакцию в зависимости от того, как он был вызван.

1

.bash_profile выполняется для оболочек входа в систему. .bashrc выполняется для интерактивных оболочек. По-видимому, WinSCP должен создавать на удаленной машине интерактивную оболочку без регистрации. Подробности можно найти в разделе INVOCATION на странице руководства Bash.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .