Как сохранить и передать переменную из сеанса ssh на локальный компьютер

Решение состоит в том, чтобы полностью сбросить установку PSQL, чтобы она находилась в том же состоянии, в котором она была установлена. Debian отделяет конфигурацию базы данных от файлов базы данных, в отличие от общей установки PSQL, которая помещает все в один и тот же каталог. Debian позволяет нескольким кластерам и даже разным версиям PSQL сосуществовать на одном хосте.

Configuration files: /etc/postgresql/[version]/[cluster]/
Binaries: /usr/lib/postgresql/[version]
Data files: /var/lib/postgresql/[version]/[cluster] 

Установка Debian PSQL автоматически вызывает initdb, т. е. инициализирует кластер с кодировкой и локалью по умолчанию. Кодировку можно изменить позже, но локаль нельзя. Чтобы изменить локаль (, возможно, другие параметры в initdb ), удалите существующий кластер по умолчанию и создайте новый :

.

-Получите привилегии суперпользователя.

-Выполните следующую команду:

pg_dropcluster --stop <version> main

For example:
pg_dropcluster --stop 8.3 main

-Запустите initdb с вашими параметрами. Например:

pg_createcluster --locale de_DE.UTF-8 --start 8.3 main
3
04.01.2021, 13:12
1 ответ

Предположим, что две команды, выполненные на удаленном хосте, выдают по одной строке вывода каждая:

{ read mac_addr; read timing; } < <(
sshpass -pthe@Donut ssh -o StrictHostKeyChecking=no "pi@$Rasp_id" <<'SSH_END'
    ip link show wlan0 | awk '/link/ { print $2 }'
    date
SSH_END
)

Это считывает две строки, созданные удаленными командами, в две локальные переменные mac_addrи timing. Данные передаются двум вызовам readпосредством перенаправленной подстановки процесса.

Если вы предполагаете, что команда dateна удаленном хосте будет выводить то же самое, что и локально, то это можно упростить:

timing=$(date)
mac_addr=$(sshpass -pthe@Donut ssh -o StrictHostKeyChecking=no "pi@$Rasp_id" <<'SSH_END'
    ip link show wlan0 | awk '/link/ { print $2 }'
SSH_END
)

Или просто

timing=$(date)
mac_addr=$(sshpass -pthe@Donut ssh -o StrictHostKeyChecking=no "pi@$Rasp_id" ip link show wlan0 | awk '/link/ { print $2 }' )

... выполнение команды awkлокально.


Небольшое примечание об остальной части вашего кода. :Не забудьте заключать в двойные кавычки любое расширение переменной и помните, что readв bashможет дать пользователю подсказку, если вы используете-p:

read -p 'Enter the raspberry IP address you want to connect: ' Rasp_id

Кроме того, Почему printf лучше, чем echo?

1
18.03.2021, 22:39

Теги

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