2012-07-27 2 views
4

다음은 PLINKMachineB에서 MachineA (Windows 시스템)으로 실행하려고 시도하는 쉘 스크립트입니다. 나는 다음과 같은 쉘 스크립트를 실행하는 plink을 사용하고sh : ... : plink를 사용하여 쉘 스크립트를 호출하려고 할 때 식별자가 아님

#!/bin/bash 
export HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology" 
hive -S -e 'SELECT count(*) from testingtable1' > attachment22.txt 

,

C:\PLINK>plink [email protected] -m test.sh 
Using keyboard-interactive authentication. 
Password: 
Using keyboard-interactive authentication. 
Your Kerberos password will expire in 73 days. 

는 그리고 이것은 내가 위에서처럼 실행하려고 할 때마다 항상 얻을 수 아래의 오류입니다.

sh: HIVE_OPTS= -hiveconf mapred.job.queue.name=hdmi-technology: is not 
an identifier 

셸 스크립트에 문제가 있습니까? 또는 일부 후행 공백? 나는 그것을 이해할 수 없다. 나는 윈도우 머신

+0

로컬 Windows 컴퓨터에서'test.sh'를 생성 한 경우 파일이 Windows가 아닌 Unix를 가지고 있는지 확인하십시오.이 파일의 줄 끝은 원격 Unix 호스트에서 제대로 실행됩니다. – chepner

+0

감사합니다 chepner. 'test.sh'에 유닉스 파일 엔딩이 있는지 확인하려면 어떻게해야합니까? 나는'Notepad ++ '를 사용하여 test.sh 파일을 만들고 유닉스 포맷으로 만들 수있는 옵션이 있으며 나는 똑같은 방법을 사용했다. – ferhan

+0

흠. 원격 컴퓨터에서'file test.sh'를 시도해보고 CRLF 행 종결 자에 대해 아무 말도하지 않도록 할 수 있습니다. – chepner

답변

13

sh: 오류 메시지의 접두사는 bash이 아닌 sh에 의해 스크립트가 실행되고 있음을 나타냅니다.

export foo=bar 

쉬, 또는 적어도 그것의 일부 이전 버전,이 두 가지 행동이 분리 될 필요합니다 :

foo=bar ; export foo 

배쉬는 변수를 설정하고 하나의 명령으로 수출을 결합 할 수 있습니다

export foo=bar 구문을 인식하지 못하는 sh 버전은 foo=bar 문자열을 변수 이름으로 해석합니다 (식별자가 아니기 때문에 불법 변수).

어느 스크립트를 준비

은 bash에 의해 실행, 또는이 변경 될이에

export HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology" 

: 그 문제에 대한

HIVE_OPTS="$HIVE_OPTS -hiveconf mapred.job.queue.name=hdmi-technology" 
export HIVE_OPTS 

을, 당신은 매우에 $HIVE_OPTS를 참조하고 이후 스크립트가 시작될 때 거의 이 이미으로 반출되었으므로 export을 삭제할 수 있습니다.

(당신은 또한 다른 bash는 고유의 기능을하지 않도록해야합니다.)

가 왜 시스템이 쉬와 쉘을 호출하는? #!/bin/bash syntax은 유닉스 계열 시스템에만 적용됩니다. Windows는 일반적으로 파일 확장명을 기반으로 스크립트를 실행하는 방법을 결정합니다. 시스템이 sh를 사용하여 *.sh 파일을 호출하도록 구성되었습니다.( 폴더 옵션을 사용하여 시스템을 구성하여 *.sh 파일을 bash를 사용하여 호출 할 수 있지만 다른 문제가 발생할 수 있습니다.)

+0

Keith, 이전 문제는 해결되었지만 새 오류가 발생했습니다. 업데이트 된 쉘 스크립트로 내 질문을 업데이트했습니다. 더 많은 제안을 할 수 있다면 좋을 것입니다. – ferhan

+2

여기서 계속하기보다는 새로운 질문을 열어야합니다. – chepner

2

에서 PLINK를 실행하고 나는 독서가 지역 파일에서 원격 컴퓨터에서 실행 명령에 대한 plink-m 옵션을 생각합니다. 라인 결말에 대한 내 의견이 작동하지 않는 경우, MachineB에

chmod +x test.sh 

을 실행하여

plink [email protected] test.sh 

test.sh가 실행되어 있는지 확인하십시오.

관련 문제