여기에 글을 쓰게 되어 기쁩니다. 이에 대해 많이 검색했지만 아직 해결책을 찾지 못했습니다. 내가 하고 싶은 일은 비교적 간단하다.
내 워크스테이션 환경의 로컬 bash 기능에 대한 경고가 있습니다.
function caveat(){
echo "function main caveat executing in $HOSTNAME"
function caveat_a(){
echo "function caveat_a executing in $HOSTNAME"
}
function caveat_b(){
echo "function caveat_b executing in $HOSTNAME"
}
}
원격 호스트에서 일부 게으른 시스템 관리 작업을 수행하기 위해 원격 호스트(대화형 셸에서)에 SSH를 수행하고 싶습니다. caveat_a 또는 caveat_b 함수를 실행해야 할 때 원격 호스트에서 해당 함수를 호출할 수 있기를 원합니다.
내 연구에 따르면 원격으로 사용 가능한 로컬 함수를 선언한 다음 직접 실행할 수 있으며... 제게는 잘 작동합니다. 하지만 나에게 필요한 것은 선언하고 대화형 셸에 들어가는 것입니다.
마지막 시도는 다음과 같이 줄 끝에 "bash --login"을 포함하는 것이었습니다.
username@localhost ~ $ caveat
function main caveat executing in localhost
username@localhost ~ $ caveat_a
function caveat_a executing in localhost
username@localhost ~ $ caveat_b
function caveat_b executing in localhost
username@localhost ~ $
username@localhost ~ $ ssh username@remote_host -t "$(declare -f caveat); caveat; caveat_a; bash --login"
Are you sure you want to continue connecting (yes/no)? yes
username@remote_host's password:
function main caveat executing in remote_host
function caveat_a executing in remote_host
username@remote_host ~ $ #nice, it executed those caveat functions as echoed above
..그것이 나와 상호작용하도록..그래서 거기에서 다른 명령을 실행할 수 있습니다..하지만 내가 눌렀을 때 'caveat<TAB><TAB>'
경고가 아직 선언되지 않았습니다.
뭔가 빠진 것 같아요. 귀하의 모든 도움과 답변에 미리 감사드립니다.
가능하다면 가능한 한 간단한(기대 없음, 다른 바이너리 없음) 간단한 솔루션을 사용하는 것이 좋습니다.
감사해요
답변1
이 시도:
ssh -t user@host "$(declare -f caveat); export -f caveat; exec bash -li"
훌륭한 조언을 해주신 @Scott에게 감사드립니다.
-t
대화형 셸이 터미널 기능에 대한 전체 액세스를 허용하려면 ssh 옵션이 필요합니다 .
exec bash -li
대화형 로그인 셸을 시작합니다. 함수를 내보냈으므로 이 새 셸에서 사용할 수 있습니다.