Я пытаюсь запустить цикл с чтения через SSH:

#!/bin/bash

ssh root@10.10.10.10 "cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c \"%Y %n\" "$path"  >> /tmp/fs_10.10.10.10.log done"

Но проблема в том, что моя переменная $ path разрешается на моем локальном хосте, где я хочу разрешить ее на удаленном хосте, чтобы он мог читать файл на удаленном хосте и получать статистику всех папок / файлов, перечисленных в «rm_filesystem.log»

3 ответа3

1

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

ssh root@10.10.10.10 'cat /var/log/syncer/rm_filesystem.log | while read path; do stat -c "%Y %n" "$path"  >> /tmp/fs_10.10.10.10.log done'
0

Я сделал так, чтобы все работало хорошо, как и должно быть:

!/ Бен / Баш

ssh root@10.10.10.10 "cat /var/log/syncer/rm_filesystem.log | во время чтения пути; выполните stat -c '% Y"% n "'"\"'$ path'\" ">> /tmp /fs_10.10.10.10.log done "

Прочитав man-страницу bash, я получил этот трюк ..

Спасибо всем за помощь

0

ssh user @ host "bash -s" <yourscript.sh

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

В приведенном выше примере откроется сеанс bash на удаленной машине и установите bash для чтения со стандартного ввода (см. Http://www.gnu.org/software/bash/manual/bashref.html#Invoking-Bash).

Затем вы передаете сценарий (который вы ввели во внешний файл), чтобы он выполнялся непосредственно на удаленном компьютере.

Таким образом, нет локального синтаксического анализа сценария и, следовательно, нет замены переменной среды.

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