Выполнение удаленного сценария на локальном компьютере

grepпредназначен только для (и первоначально )печатал (только )строки, соответствующие шаблону. Вот что grepозначает (на основе командыg/re/ped).

Некоторые grepреализации добавили несколько функций, которые немного ущемляют роль других команд. Например, у некоторых есть несколько -r/ --include/ --excludeдля выполнения части работы find.

В GNU grepдобавлена ​​опция -o, которая заставляет выполнять часть работы sed, позволяя редактировать совпадающие строки.

pcregrepрасширил его с помощью -o1, -o2... для печати того, что соответствует группам захвата. Таким образом, с этой реализацией, хотя она и не была предназначена для этого, вы можете фактически заменить:

sed 's/old/new/'

с:

pcregrep --om-separator=new  -o1 -o2 '(.*?)old(.*)'

Однако это не работает должным образом, если группы захвата соответствуют пустой строке.На входе типа:

XoldY
Xold
oldY

это дает:

XnewY
X
Y

Вы можете обойти это, используя еще более неприятные приемы, такие как:

PCREGREP_COLOR= pcregrep --color=always '.*old.*' |
  pcregrep --om-separator=new -o1 -o2 '^..(.+?)old(.+)..' |
  pcregrep -o1 '.(.*).'

То есть добавьте и добавьте\e[m(раскрашивающую escape-последовательность )ко всем совпадающим строкам, чтобы убедиться, что по обе стороны от oldесть хотя бы один символ, и затем удалите их.

0
25.07.2019, 12:45
1 ответ

В вашем распоряжении

ssh user_name@192.168.1.xx "bash -s" -- < scripts/machine-info.sh

перенаправление с scripts/machine-info.shпроисходит локально. Это перенаправление в команду sshи данные попали бы на стандартный ввод удаленного bash -sпроцесса (, если бы файл существовал локально, но его нет, поэтому вы получаете ошибку ).

В других показанных вами примерах доступ к сценарию осуществляется на удаленной машине.

Например, в

ssh user_name@192.168.1.xx 'bash -s -- < scripts/machine-info.sh'

Перенаправление является частью команды, выполняемой на удаленной машине, из-за одинарных кавычек вокруг командной строки.

2
28.01.2020, 02:29

Теги

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