Переменная, назначенная внутри команды ssh, не возвращает правильное значение

Переменная, назначенная внутри команды ssh, не возвращает правильное значение

Я выполняю следующую команду в sshчасти моего скрипта. Команда предназначена для того, чтобы вырезать размер файла из lsопции и сохранить его в переменной. Затем вывести переменную:

echo "Enter srouce file";
read src_file;
src_size =`ls -latr $src_file | awk  '{ print $5 }' `;
echo "The source file size is $src_size ";

Это прекрасно работает при запуске в командной строке.

Когда я пробую ту же команду внутри скрипта через ssh:

ssh user@server "echo "enterfile";read src_file;echo "enter path ";read path;cd $path;src_size=`ls -latr $src_file | awk  '{ print $5 }' ` ; echo The source file size is $src_size;"

Это не удается. Он сохраняет некоторое локальное временное значение и возвращает то же самое вместо правильного размера файла.

решение1

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

Это чище, удобнее и выглядит лучше :)!

Например, просто сделайте это:

echo "Enter source file"
read src_file
ssh user@server 'bash -s' < /path/to/local_script.sh "$src_file"

Содержание local_script.sh:

#!/bin/bash
src_file="$1"
src_size =`ls -latr $src_file | awk  '{ print $5 }'`
echo "The source file size is $src_size "

Не забудьте добавить путь к вашему local_script.sh:)

решение2

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

Что-то вроде этого должно сделать то, чего вы пытаетесь добиться:

ssh user@server 'echo "Enter file: "; read src_file; echo "Enter path: "; read path; cd $path; src_size=`ls -latr $src_file | awk  "{ print \$5 }"`; echo "The source file size is $src_size;"'

Обратите внимание, что мне нужно было изменить '{ print $5 }'на "{ print \$5 }", экранировав , $поскольку теперь он находится в двойных кавычках, а не в одинарных, и я не хочу, чтобы $5оболочка интерпретировала .

Связанный контент