Windows의 C:\Program Files (x86)... 경로로 인해 Bash 스크립트가 작동하지 않습니다.

Windows의 C:\Program Files (x86)... 경로로 인해 Bash 스크립트가 작동하지 않습니다.

저는 bash 에뮬레이트 터미널을 사용하여 Windows 7에서 bash 스크립트를 개발 중입니다. 정확하게 말하면 MobaXterm 9.1에서 bash 터미널을 사용하고 있습니다. 그 이유는 Windows 7 랩톱이 있지만 내 스크립트는 궁극적으로 Jenkins Linux 서버에서 실행되기 때문입니다.

경로에 공백 및/또는 (가 있으면 스크립트가 성공적으로 실행되지 않습니다.

내 스크립트는 다음과 같습니다

#!/bin/bash
eclexe0="C:\Program Files (x86)\HPCCSystems\6.0.4\clienttools\bin\ecl.exe"
eclexe1="/drives/c/Program Files (x86)/HPCCSystems/6.0.4/clienttools/bin/ecl.exe"
clear

#1
echo "Testing if ecl.exe is available..."
if [ -f "$eclexe0" ]; then
  echo "FOUND." >&2
else
  echo "NOT FOUND." >&2
  exit 1
fi

echo "Executing ecl.exe"

echo 1
eval "$eclexe0"

echo 2

내가 실행하면 출력은 다음과 같습니다.

스크린샷

보시다시피 스크립트는 경로에 만족하지 않습니다.C:\프로그램 파일(x86). 파일을 다른 경로(C:\oscar\eclfolder)로 이동하면 작동합니다. 나는 대답을 시도했다여기하지만 작동하지 않습니다. 아마도 Windows 7을 사용하고 있기 때문일 것입니다.

이 스크립트를 어떻게 작동하게 만들 수 있나요?

답변1

eval실행 파일의 경로 이름에서 실행 중이므로 스크립트가 작동하지 않습니다 .

모든 쉘 스크립트에서 변수를 사용하여 실행할 명령을 지정할 수 있습니다.

인용문을 인용하지 않으면 $variable변수의 내용도 공백을 기준으로 별도의 단어로 분할됩니다.

변수 참조를 인용했습니다. 그러나 을 실행하면 eval변수 확장 결과를 구문 분석합니다.두번째시간. 필요하지 않습니다.

다음 이미지는 유익할 수 있습니다.

$ ls
file.txt    file2.txt
$ somevar=ls
$ $somevar
file.txt    file2.txt
$ ls -l
total 0
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file.txt
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file2.txt
$ somevar='ls -l'
$ $somevar
total 0
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file.txt
-rw-r--r--  1 Me  staff  0 Sep  2 16:06 file2.txt
$ "$somevar"
bash: ls -l: command not found
$ 

보시다시피 "ls -l", 인용문을 실행하려고 하면 쉘이 다음과 같은 명령을 찾습니다.정밀한이름 - 공백을 포함합니다.

내 경우에는 이것이 내가 원하는 것이 아니다.

그러나 귀하의 예에서는당신은 무엇을 원합니까?

을 사용할 필요가 없으며 eval "$eclexe0"을 사용하면 됩니다 "$eclexe0".


더 큰 그림

무료 조언: Linux 시스템에서 스크립트를 실행하려는 경우 Linux 시스템에서 테스트하십시오. MobaXterm은 Linux 박스가 아닙니다.

Vagrant와 VirtualBox(둘 다 무료)를 설치하고 테스트할 수 있는 가상 머신을 생성하세요.


추가 자료:

답변2

이 기사에 따르면 다음과 같이 따옴표("\"string"\")를 이스케이프해야 할 수도 있습니다.https://stackoverflow.com/questions/5253782/bash-problem-with-eval-variables-and-quotes

관련 정보