Как мне установить $ PATH таким образом, чтобы `ssh user @ host command` работал?

Большинство предлагаемых решений используют альтернативные пути повторения, т. е. (A | B) *.

Вы можете столкнуться с переполнением стека на больших входах, поскольку какой-то компилятор шаблонов реализует это с помощью рекурсии.

Java, например: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6337993

Что-то вроде этого: "(?:[^"\\]*(?:\\.)?)*" или один предоставленный Гаем Бедфордом, уменьшит количество шагов синтаксического анализа, избегая большинства переполнений стека.

123
задан Denver Gingerich 2 June 2009 в 16:34
поделиться

4 ответа

Как сказал Гравити, ~ / .bashrc - это то, что вам нужно, поскольку он получен из неинтерактивных оболочек без входа в систему.

Я полагаю, что проблема, с которой вы столкнулись, должна решить с файлом Ubuntu по умолчанию ~ / .bashrc. Обычно это начинается примерно так:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

Вы хотите поместить что-нибудь для неинтерактивных оболочек перед этой строкой.

172
ответ дан 24 November 2019 в 01:07
поделиться

Есть ли у вас ~ / .bash_login или ~ / .bash_profile ?

Bash в интерактивном режиме проверяет эти файлы и использует первый существующий , в следующем порядке:

  1. ~ / .bash_profile
  2. ~ / .bash_login
  3. ~ / .profile

Итак, если у вас есть ~ /. bash_profile , то любые изменения, которые вы сделаете в ~ / .profile , останутся невидимыми.

Bash в неинтерактивном режиме иногда читает файл ~ / .bashrc (который также часто берется из интерактивных скриптов.) Под «иногда» я подразумеваю, что он зависит от дистрибутива: как ни странно, есть опция времени компиляции для включения этого. Debian разрешает чтение ~ / .bashrc , в то время как, например, Arch этого не делает.

ssh , похоже, использует неинтерактивный режим, , поэтому ~ / .bashrc должно быть достаточно. При возникновении подобных проблем я обычно добавляю несколько эхо, чтобы увидеть, какие файлы запускаются.

29
ответ дан 24 November 2019 в 01:07
поделиться

Вы всегда можете сказать:

ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
6
ответ дан 24 November 2019 в 01:07
поделиться

Документация по ssh говорит:

Если команда указана, она выполняется на удаленном хосте вместо оболочки входа.

поэтому добавление в файлы bashrc не работает . однако у вас есть следующие параметры:

  1. Если параметр PermitUserEnvironment установлен в конфигурации sshd, вы можете добавить свой параметр PATH в ~ / .ssh / environment

  2. ssh remotemachine ' bash -l -c "somecommand" '

20
ответ дан 24 November 2019 в 01:07
поделиться
Другие вопросы по тегам:

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