Я действительно не мог заставить "openconnect" правильно работать со всеми аргументами командной строки, поэтому в итоге я написал для него сценарий Expect.
Руй Ф. Рибейро ответил именно на деньги, однако мне нужно было немного больше исследований, чтобы заставить все работать, мелочи, переменные и тому подобное.
В интересах всех, кто когда-либо просматривал этот вопрос, я публикую сценарий, который разрешает мой прецедент для исходного вопроса, не потому, что это альтернатива, а потому, что он является «расширением» обмена знаниями Руи Ф. Рибейро.
#!/usr/bin/expect -f
set vpn_url "vpn.domain.com"
set vpn_username "theuser"
set vpn_password "thepassword"
set ubuntu_username "theubuntuloginuser"
set ubuntu_password "theubuntuloginpass"
set force_conservative 0 ;# set to 1 to force conservative mode even if
;# script wasn't run conservatively originally
if {$force_conservative} {
set send_slow {1 .1}
proc send {ignore arg} {
sleep .1
exp_send -s -- $arg
}
}
set timeout -1
spawn $env(SHELL)
match_max 100000
send -- "sudo LD_LIBRARY_PATH=\"/usr/local/lib\" openconnect --juniper --no-cert-check $vpn_url -u $vpn_username\r"
expect {
"password for $ubuntu_username:" {
send -- "$ubuntu_password\r"
}
}
expect -exact "password:"
send -- "$vpn_password\r"
expect eof
Мне кажется, это то, что вы пытаетесь сделать:
awk '/icn=/ { sub(/icn=.[0-9][0-9]*/, "icn=\""++v); print } ' file.xml