Я смотрел на двунаправленного оператора в awk и пытался его понять.
https://www.gnu.org/software/gawk/manual/html_node/Two_002dway-I_002fO.html#Two_002dway-I_002fO
Итак, я попробовал это в файле .awk,
BEGIN {
cmd="tr [a-z] [A-Z]"
print "hi" |& cmd
close(cmd,"to")
cmd |& getline
close(cmd)
}
найдено здесь, https://books.google.se/books?id=NrZTDwAAQBAJ&pg=PA322&lpg=PA322&dq=bidirectional+pipeline+awk+example&source=bl&ots=awgGmpZBxm&sig=ACfU3U0jxy2GO2qaUb-gCOrP9CmrC3SsYA&hl=sv&sa=X&ved=2ahUKEwijw8i267viAhXq-ioKHRyWDwMQ6AEwC3oECAgQAQ#v=onepage&q=bidirectional%20pipeline%20awk%20example&f=false
Это выглядит довольно хорошо, поэтому я попытался изменить его,
BEGIN {
cmd="ssh some_server"
print "ls /some/file" |& cmd
close(cmd,"to")
cmd |& getline
print $0
close(cmd)
}
Это не очень хорошо, хотя.Мне удается войти и получить баннер.Затем я получаю сообщение,
Предупреждение: нет доступа к tty (Плохой дескриптор файла).
После завершения программы завершается.Однако команда "ls" не запущена.Кто-нибудь, кто знает, что я пропустил?
РЕДАКТИРОВАТЬ
Я также попытался
BEGIN {
cmd="ssh some_server"
print "ls /some/file" |& cmd
cmd |& getline
print $0
close(cmd)
}
, не закрывая поток в одном из направлений.Результат непредсказуем.Он либо зависает, либо выходит из строя одинаково.По крайней мере, он не работает.
Запуск "ssh server ls / some / file" работает нормально, поэтому я подозреваю, что это проблема с bk / tcsh, связанная с awk.
РЕДАКТИРОВАТЬ2
Есть много других предложений здесь, поэтому я думаю, что мне нужно обновить свои вопросы.Иногда кажется, что MVCE может вызвать больше проблем, которые ему помогают ...
В любом случае, идея состоит в том, чтобы запустить сеанс ssh, на который я могу продолжать посылать новые команды, пока я не закончу, а затем закрыть ssh.сессия.Таким образом, идея состояла в том, чтобы инициировать сеанс оболочки ssh, а затем передать ему команды и прочитать ответы с помощью этого оператора.
BEGIN {
cmd="ssh some_server"
print "ls /some/file" |& cmd
cmd |& getline
print $0
print "some other command" |& cmd
cmd |& getline
close(cmd)
}
Также есть другие варианты, которые можно рассмотреть, но ни один из которых не будет легким.
EDIT3
Думает, что я перезапущу это здесь.
Я хочу начать сеанс ssh с клиентом ssh, идущим сстандартный дистрибутив linux RHEL7.Затем я хочу оставить сеанс открытым, пока продолжаю посылать ему команды.Когда я закончу, мне нужно прекратить сеанс.Из bash это будет выглядеть примерно так:
ssh host
command1
command2
exit
Требование заключается в том, что это делается с помощью сценариев чистого awk.Все другие варианты просто создадут больше проблем в будущем.Обратите внимание, что имя пользователя пропущено.В настоящее время это обрабатывается в нашей среде, и ssh 10.10.10.10
прекрасно работает.
BR Patrik