Я возможен сделать все на сингле ssh
соединение/сессия:
ssh user@host "cat > remote_dst; command; cat remote_src" < local_src > local_dst
Это:
local_src
кому: remote_dst
,command
,remote_src
кому: local_dst
.Но если command
записи на stdout
, результат с также быть в local_dst
. Если command
вход чтений от stdin
, это получит и EOF
.
Нет никакого пути (что я знаю о) к непосредственно локальным переменным сценария доступа вне контекста того сценария; <SID>
только работы для функций (и только в отображениях).
Вы могли обеспечить косвенный доступ через функцию, хотя:
function! s:FoobarHash()
return s:Foobar
endfunction
function! s:MySurroundingFunctionIWantToKeep()
let s:Foobar={'foo': 'bar'}
map \42 :echo <sid>FoobarHash()['foo']<cr>
endfunction
call s:MySurroundingFunctionIWantToKeep()
В зависимости от того, как изолированный Вы хотите сохранить переменную, Вы могли сделать функцию “средства доступа” более строгой (только позволяют определенные ключи, только позволяют доступ для чтения, только позволяют записи определенным ключам, и т.д.).
let s:Foobar={'foo': 'bar', 'baz': 'quux'}
function! s:FoobarAccess(...)
" Provide limited access to the script-local hash s:Foobar
if a:0 == 1
" allow read access to all keys
return s:Foobar[a:1]
elseif a:0 == 2
" allow write access to only 'foo'
if a:1 !=# 'foo'
throw 'FoobarAccess: not allowed to write to key ' . a:1
endif
let old = s:Foobar[a:1]
let s:Foobar[a:1] = a:2
return old
else
throw 'FoobarAccess must take exactly one or two arguments'
endif
endfunction
map \42 :echo <sid>FoobarAccess('foo')<cr>
map \43 :echo <sid>FoobarAccess('foo','new value')<cr>
map \44 :echo <sid>FoobarAccess('baz')<cr>
map \45 :echo <sid>FoobarAccess('baz',1)<cr>