Выполнение конвейера bash с использованием ssh

Использование awk:

$ awk '{$2=substr($2,index($2,"]")+1);print $2,$3}' file
foo1 bar1
foo2 bar2
foo3 bar3
foo4 bar4
foo5 bar5

Второй параметр $2усекается с использованием substrиз первого найденного ]. Затем распечатываются параметры 2 и 3.

2
03.03.2020, 10:39
2 ответа

Решение следующее:

ssh -i ~/keys/pem_key.pem ec2-user@url.com "sudo docker logs \$(docker ps | grep 'test' | awk '{print\$1}')"
0
28.04.2021, 23:21

Хотя можно передать команду, требующую сложных кавычек, через sshаргумент (s )на удаленное устройство, часто проще указать ее как ввод , а не :

. ]
 ssh -i ~/keys/pem_key.pem ec2-user@url.com <<'EOF'
 sudo docker logs $(docker ps | grep 'test' | awk '{print$1}')
 EOF

Обратите внимание, что здесь -разделитель документа 'EOF'заключен в кавычки; это приводит к тому, что ввод передается без каких-либо изменений на удаленное устройство, которое его выполняет. На самом деле это может быть любая строка, которой нет на входе; EOF— это обычное и простое значение типа от -до -. И вы можете использовать вместо этого <<\EOFили <<"EOF", если хотите.

Также обратите внимание, что этот конкретный случай можно упростить до:

 ssh -i ~/keys/pem_key.pem ec2-user@url.com <<'EOF'
 sudo docker logs $(docker ps | awk '/test/{print$1}')
 EOF
3
28.04.2021, 23:21

Теги

Похожие вопросы