Вы правы, что это цитата. Заключая удаленную команду в двойные кавычки, вы указываете локальной оболочке интерпретировать все, что она может передать сеансу ssh. В данном случае команда cat
.
Если вы заключите команду в одинарные кавычки, у вас не будет этой проблемы, но вы также не сможете раскрыть переменные, которые были определены вне одинарных кавычек.
локальный файл:
bash-[501]$ echo $(hostname) > /tmp/samplefile
bash-[506]$ echo $(cat /tmp/samplefile)
tank
создать удаленный файл:
bash-[502]$ ssh evil 'echo $(hostname) > /tmp/samplefile'
bash-[501]$ cat /tmp/samplefile
evil
попытаться просмотреть удаленный файл в двойных кавычках:
bash-[508]$ ssh evil "echo `cat /tmp/samplefile`"
tank
попытаться просмотреть удаленный файл в одинарных кавычках:
bash-[509]$ ssh evil 'echo `cat /tmp/samplefile`'
evil
определить файл как переменную для обработки на удаленной стороне:
bash-[527]$ ssh evil 'F=/tmp/samplefile; cat $F'
evil
В вашем случае, заключая команду в одинарные кавычки и определяя $ CHECK
внутри этих кавычек, чтобы было достаточно, чтобы отправить все для интерпретации на удаленной стороне .
ssh -n test@192.168.1.2 'CHECK=/home/test/Desktop; until [ `cat $CHECK/samplefile | grep "string"` ]; do touch $CHECK/success; done'
Чтение чисел из файла одно за другим и выполнение перемещения (предполагает наличие оболочки POSIX):
while read -r number; do
name="gre_6_c1_d$number.h3"
[ -f "$name" ] && mv -i "gre_6_c1_d$number.h3" /other/directory
done <number.list
Это также гарантирует, что номер дает имя файла, существующего в текущем каталоге, перед его перемещением в другой каталог.Кроме того, команда mv -i
запросит подтверждение перед перезаписью существующего файла.
Поскольку этот вопрос был помечен xargs , мы могли бы попросить xargs
сгенерировать для нас список чисел:
xargs sh -c '
for number do
name="gre_6_c1_d$number.h3"
[ -f "$name" ] && mv "gre_6_c1_d$number.h3" /other/directory
done' sh <number.list
Это ничего не ускорит, но если ваш xargs
предоставит флаг -P
для параллельной работы, вы можете получить небольшой прирост скорости:
xargs -P 5 -n 10 -h sh -c '
for number do
name="gre_6_c1_d$number.h3"
[ -f "$name" ] && mv "gre_6_c1_d$number.h3" /other/directory
done' sh <number.list
Это запустит не более пяти копий цикла параллельно и даст каждому не более десяти чисел в пакетах.