Большинство предлагаемых решений используют альтернативные пути повторения, т. е. (A | B) *.
Вы можете столкнуться с переполнением стека на больших входах, поскольку какой-то компилятор шаблонов реализует это с помощью рекурсии.
Java, например: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=6337993
Что-то вроде этого: "(?:[^"\\]*(?:\\.)?)*"
или один предоставленный Гаем Бедфордом, уменьшит количество шагов синтаксического анализа, избегая большинства переполнений стека.
Как сказал Гравити, ~ / .bashrc - это то, что вам нужно, поскольку он получен из неинтерактивных оболочек без входа в систему.
Я полагаю, что проблема, с которой вы столкнулись, должна решить с файлом Ubuntu по умолчанию ~ / .bashrc. Обычно это начинается примерно так:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return
Вы хотите поместить что-нибудь для неинтерактивных оболочек перед этой строкой.
Есть ли у вас ~ / .bash_login
или ~ / .bash_profile
?
Bash в интерактивном режиме проверяет эти файлы и использует первый существующий , в следующем порядке:
~ / .bash_profile
~ / .bash_login
~ / .profile
Итак, если у вас есть ~ /. bash_profile
, то любые изменения, которые вы сделаете в ~ / .profile
, останутся невидимыми.
Bash в неинтерактивном режиме иногда читает файл ~ / .bashrc
(который также часто берется из интерактивных скриптов.) Под «иногда» я подразумеваю, что он зависит от дистрибутива: как ни странно, есть опция времени компиляции для включения этого. Debian разрешает чтение ~ / .bashrc
, в то время как, например, Arch этого не делает.
ssh
, похоже, использует неинтерактивный режим, , поэтому ~ / .bashrc
должно быть достаточно. При возникновении подобных проблем я обычно добавляю несколько эхо, чтобы увидеть, какие файлы запускаются.
Вы всегда можете сказать:
ssh remotemachine 'export PATH=wedontneedastinkingpath; echo $PATH'
Документация по ssh говорит:
Если команда указана, она выполняется на удаленном хосте вместо оболочки входа.
поэтому добавление в файлы bashrc не работает . однако у вас есть следующие параметры:
Если параметр PermitUserEnvironment
установлен в конфигурации sshd, вы можете добавить свой параметр PATH в ~ / .ssh / environment
ssh remotemachine ' bash -l -c "somecommand" '