방법

2012-11-24 8 views
3

가 나는 일반 사용자를 연결하는 떠들썩한 + 기대 스크립트를 가지고, 내가 특정 파일 루트에 잠시 후 를 사용하는 특정 파일을 읽어 변수에 저장 원하는 쉘 스크립트 내부의 기대 사용 사용자. 어떻게 가치를 얻을 수 있습니까? 내 스크립트입니다 : 방법

파일이

존재하지 않는 권한

거부 ​​:

LS :/루트/난 내 쉘 스크립트를 실행 해요 때마다

#!/bin/bash 
set prompt ">>> " 
set command ls /root/test1 

expect << EOF 
spawn su root 
expect "password:" 
send "rootroot\r" 
expect "$prompt\r" 
send "$command\r" 
expect "$prompt\r" 
expect -re "(.*)\r\n$prompt\r\n" 
EOF 

echo "$command" 

if [ ! -f "$command" ]; then 

       echo "file is not exist" 
else 
       echo "file is exist" 
      fi 

그것은 다음과 같은 출력을 보여줍니다

기본적으로 테스트가 있지만 "파일이 존재하지 않음"을 보여줍니다.

+0

셸이 루트 액세스에 성공 했습니까? –

+0

루트에 성공적으로 연결하고 있지만 거기에서 읽거나 쓸 수는 없습니다. –

+0

bash 스크립트에 tcl'set' 명령이 있습니다. 감안할 때, $ prompt와 $ command 쉘 변수는 모두 해제되어 있습니다. –

답변

0

이 질문은 매우 오래된 질문이지만 누군가이 답변을 얻길 바랍니다.

->expect을 올바르게 사용하려면 #!/usr/bin/expect 또는 #!/bin/expect을 사용해야합니다. expect<<EOF은 작동하지만 스크립트를 작성하는 일반적인 방법은 아닙니다.

-> 스크립트는 EOF 문으로 끝나야합니다. 전의.

#!/usr/bin/expect << EOF 
<some stuff you want to do> 
EOF 

-> 일부 기본 사항은 spawn입니다. spawn에 작성한 내용은 실행되지만 전체 스크립트에는 영향을 미치지 않습니다. 환경 변수와 비슷하지 않습니다.

간단히 말해서, spawn은 새로운 프로세스를 시작하고 명령이 생성 프로세스 중이 아닙니다. Ex. 내가 위의 예에서 보여처럼 스크립트에 이제

#!/usr/bin/expect 
spawn bash -c "su root '<your-cmd-as-root>'" 
<some-expect-send-stuff-etc> 

, $command 내부 spawn를 작성해야합니다.