Переменные среды Bash в неинтерактивном режиме

Проблема связана с разницей между DNS-именем, использующим заглавные буквы, и взаимодействием между изменениями BIND и (теперь) ошибочными скриптами / командами из-за проблем с чувствительностью к регистру.

Этот URL check_dig чувствителен к регистру , вместе с этим check_dig: ожидаемый ответ теперь нечувствителен к регистру должен пролить свет на аналогичные проблемы на уровне приложений / сценариев.

Здесь задокументировано изменение, вызвавшее вышеупомянутое поведение в BIND 9.9.5: Сжатие ответов без учета регистра может вызвать проблемы с данными в смешанном регистре и несоответствующими клиентами

1
09.03.2019, 20:58
2 ответа

Краткий ответ

Попробуйте явным образом указать источник файла rc (и использовать одинарные -кавычки):

ssh pi@192.168.0.015 'source ~/.bashrc; echo $VTEMP > out.txt'

Пояснение

Здесь есть две проблемы. Во-первых, существует вопрос о том, какой файл rc (run commands )является источником и при каких обстоятельствах. Во-вторых, есть проблема с тем, какую команду вы передаете ssh.

Что касается первой проблемы, то ни ~/.profile, ни ~/.bashrcне будут выполняться не -интерактивной оболочкой Bash. В общем, вы можете захотеть использовать переменную окружения BASH_ENVпри вызове не интерактивных сценариев -. Это описано в руководстве Bash здесь:

Эта проблема также обсуждается в следующих сообщениях, с которыми вы можете ознакомиться:

К сожалению для вас, это может быть неприменимо в случае выполнения не -интерактивной команды ssh -см. следующий пост для дальнейшего обсуждения:

Таким образом, кажется, что лучшее решение для вас, вероятно, состоит в том, чтобы не полагаться на автоматический поиск одного из файлов rc/profile, а просто явно запустить нужный сценарий самостоятельно, например. запустите source ~/.bashrcперед запуском echo $VTEMP > out.txt.

Наконец, ваша команда использует двойные -кавычки вместо одинарных -, что означает, что ваша $VTEMPпеременная оценивается локально, а не удаленно -, вместо этого вам следует использовать одинарные -кавычки. Собрав все это вместе, мы имеем следующее решение:

ssh pi@192.168.0.015 'source ~/.bashrc; echo $VTEMP > out.txt'
3
27.01.2020, 23:30

Ваш вывод пуст, потому что вы забыли экранировать команду. Должно быть:

ssh pi@192.168.0.015 'echo $VTEMP > out.txt'

В противном случае значение $VTEMPбудет заменено вашей оболочкой локально , и, поскольку вы не определили его на своем локальном компьютере, оно ничего не печатает.

2
27.01.2020, 23:30

Теги

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