Я выполняю следующую команду в 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
оболочка интерпретировала .