bash для передачи массива в ssh на другой сервер - PullRequest
1 голос
/ 11 октября 2019

В приведенном ниже bash я пытаюсь передать ${array[$i]} в ssh после перехода в конкретный каталог, но ${array[$i]} он не распознается? Цель состоит в том, чтобы использовать идентификатор в ${array[$i]} (их может быть больше 1) для дальнейшего перехода в этот каталог. bash, кажется, работает должным образом, за исключением того, что ${array[$i]} не передается.

bash

readarray -t array <<< "$(printf '%s\n' $id)"
for ((i=0; i<${#array[@]}; i++ )) ; do
   echo "${array[$i]}"
done

 sshpass -f file.txt ssh -o strictHostKeyChecking=no -t xxx@xxx "${array[$i]}" 'cd path/to/folder/"$array[$i]" && exec bash -l'
 echo ${array[$i]}

возможно?

readarray -t array <<< "$(printf '%s\n' $id)"
for ((i=0; i<${#array[@]}; i++ )) ; do
   echo "${array[$i]}"
done

 for i in "${array[$i]} ; do
 sshpass -f file.txt ssh -o strictHostKeyChecking=no -t xxx@xxx "${array[$i]}" 'cd path/to/folder && exec bash -l'
done

содержимое массива [$ i] ---- массив [$ i] будет каждый раз отличаться по количеству, но формат всегда будет одинаковым ----

00-0000-xxx-xxx-xxx
00-0001-yyy-yyy-yyy

желаемый SSH

cd path/to/folder/00-0000-xxx-xxx-xxx && cp *.txt* /home/location
cd path/to/folder/00-0000-yyy-yyy-yyy && cp *.txt* /home/location

1 Ответ

1 голос
/ 11 октября 2019

Здесь мы генерируем один пульт, который запускает (cd ... && exec cp) для каждого элемента массива, причем каждый в подоболочке предотвращает побочные эффекты cd на команды последующих элементов:

printf -v cmd_q '(cd /path/to/folder/%q && exec cp -- *.txt* /home/location)\n' "${array[@]}"
sshpass -f file.txt ssh -o strictHostKeyChecking=no -t xxx@xxx "$cmd_q"

exec - незначительное улучшение производительности, при котором подоболочка запускается с круглой скобки, заменяя ее процессом cp.

Заполнитель %q в строке формата printf заменяется отдельнымзначения массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...