2016-09-26 2 views
1

최근 bash를 사용하여 chntpw으로 Windows 복구 디스크를 자동화하기 시작했습니다. 어떤 chntpw 대화 질문을 듣고 사용자 입력없이 올바른 대답을 입력하기 위해 expect 명령을 사용하는 프로그램을 설정하려고합니다. 어떤 이유로 든 #!/bin/bash이 아닌 #!/usr/bin/expect을 사용하도록 bash 스크립트를 설정 한 후 더 많은 표준 터미널 명령을 더 이상 이해할 수 없습니다.간단한 명령이 없습니다. bash (#!/usr/bin/expect)

[email protected]:~/Desktop/projects/breezee$ bash breezee1.sh 

터미널 출력은 다음과 같다 :

내가 터미널에이를 입력하여 스크립트를 실행하고있어에서

#!/usr/bin/expect 
clear 
echo "BREEZEE 1.0" 
echo "Welcome to BREEZEE" 

fdisk -l 
#list partitions 
echo -n "[Select] /dev/:" 
#ask user to choose primary windows partition 
read sda 
clear 

echo /dev/$sda selected 

umount /dev/$sda 
sudo ntfsfix /dev/$sda 
sudo mount -t ntfs-3g -o remove_hiberfile /dev/$sda /mnt/ 
cd /mnt/Windows/System32/config 

clear 
chntpw -l SAM #list accounts on windows partition 
chntpw -u Administrator SAM 
#now supply chntpw with values to run the password clear (this answers the prompts) 

expect '> ' 
send '1\r' 
expect '> ' 
send '2\r' 
expect '> ' 
send '3\r' 
expect ': ' 
send 'y\r' 
expect '> ' 
send 'q\r' 
expect ': ' 
send 'y\r' 

clear 
echo "Operation Successfull!" 
chntpw -l SAM #list accounts on windows partition 

: 여기

BREEZEE 1.0 
Welcome to BREEZEE 
breezee1.sh: line 9: fdisk: command not found 
[Select] /dev/: 

내 코드입니다 짧음, 표준 bash/terminal 명령을 expect 명령과 함께 사용하려고합니다. 나는이 모든 잘못에 대해 아마 갈거야. 그래서 나는 약 3 일 동안이 문제를 해결해 왔고 멀리 가지 않았다. (

답변

3

스크립트를 실행해야하는 응용 프로그램을 지정할 때 다음을 수행 할 수있다. 전용 응용 프로그램이 이해할 수있는 스크립트 언어를 사용합니다.

을 분명히 기대하는 것은 bash는하지 않고, bash는 명령을 이해하지 못합니다.

을 난 당신이 두 스크립트를 분리하는 것이 좋습니다.에 대한 두 번째, !#/bin/bash에 대한 첫 번째 부분을 쓰기 첫 번째 스크립트에서 두 번째 스크립트를 호출하고 chntpw로 리디렉션하도록하십시오.

+0

이것은 실제로 많은 의미가 있습니다. bash에 익숙하지 않은 나는 방금'! #/usr/bin/expect'가 예상 된 지원을 포함하는 대안적인 bash 인터프리터라고 생각했습니다. 분명히 나는 ​​틀렸고, 그게 내 혼란의 원인이었습니다. 고마워요! – pattyd

+1

잠깐, 그래서 나는 인터프리터를'! #/bin/bash'로 바꾸었고 여전히'fdisk : command not found' 문제가 발생 했습니까? ** 업데이트 : **'sudo'를 추가하여 수정했습니다. – pattyd

+0

@pattyd : 또한 예를 들어 스크립트를 실행합니다. 'bash breezee1.sh'는 shebang ('#!') 줄에 상관없이 bash 스크립트로 실행합니다. 일반적으로 스크립트를 실행 가능하게 설정해야합니다 (예 :'chmod + x breezee1.sh') 그런 다음'./breezee1.sh'와 같은 명령을 실행합니다 (shebang이 어떻게 동작하는지 제어 할 수 있습니다). –

2

expect은 bash가 아닌 을 사용합니다. 따라서 #!/usr/bin/expect을 사용할 때 TCL에 스크립트를 작성할 수 있습니다. 예를 들어

, echo "BREEZEE 1.0"는 다음과 같이 기록한다 :

puts "BREEZEE 1.0" 

그리고 당신은 exp_send 대신 send 사용해야합니다. expect manual에서

: 를 전송하기위한

exp_send는 별명입니다. Tk 환경에서 Expectk 또는 Expect의 다른 변형을 사용하는 경우 은 완전히 다른 목적으로 Tk에 의해 정의됩니다. exp_send는 환경 간의 호환성을 위해 제공됩니다. 유사한 다른 별칭이 다른 Expect의 다른 에 대해 명령을 보내도록 제공됩니다.

관련 문제