Мне любопытно, часто я хотел бы перенести все настройки моей оболочки (точечные файлы) в удаленный сеанс непосредственно во время сеанса, а затем перевернуть их, когда я выйду из системы. Еще лучше было бы сделать их активными только в этом сеансе, чтобы любой, кто входит в систему, также мог иметь стандартные или свои собственные настройки оболочки.

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

3 ответа3

2

Вам не нужно много писать (только сценарий оболочки). Инструменты уже есть. Используйте их для экспорта только того, что вам нужно, чтобы избежать бремени исправления функций оболочки других.

(set; alias) |
ssh -l root 10.3.0.8 'mkdir ~/tmp 2>/dev/null; cat > ~/tmp/.import'

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

(set; alias) > ~/tmp/import
bash -n tmp/import

tmp/import: line 6085: syntax error near unexpected token `('
tmp/import: line 6085: `        !(?(*/)python*([0-9.])|-?))'

Это меньше проблем только с переменными окружения, потому что анализируемый формат легко реализовать:

env | sed -Ee "
      s/'/\\\\'/g;
      s/=(.*)/='\1'/
      " > tmp/export.vars-only

И экспортировать только ваши функции можно так.

declare -f `grep  ^function ~/.functions | awk '{print $2}'`

Если вы используете синтаксис moo() { true;} чтобы объявить их или некоторые их вариации, вы можете попробовать grep -Eoe '^\w+' ~/.functions

1

В зависимости от того, что именно вам нужно, есть несколько решений.

  1. Если у вас есть контроль над конфигурацией сервера openssh, вы можете настроить AcceptENV на сервере, а затем SendENV в клиенте отправит через определенные переменные среды.

  2. Если этого недостаточно, и вы используете ключ auth, вы можете использовать записи authorized_keys для запуска определенных команд, таких как загрузка файлов настроек, которые вы уже передали.

  3. Если ни один из них не работает для вас, вам просто нужно обернуть ваш скрипт / команду оболочкой, которая устанавливает вашу среду.

0

Боюсь, вам придется написать что-то нестандартное .... что-то похожее на простую команду cp для задействованных каталогов и файлов.

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