예상치 못한 토큰으로 인해 스크립트가 실패함 >' [중복]

예상치 못한 토큰으로 인해 스크립트가 실패함 >' [중복]

다음 스크립트를 실행하면 오류가 발생합니다. 이 문제를 해결하는 방법?

  1 #!/bin/bash
  2 # Show colored output if running interactively
  3 if [ -t 1 ] ; then
  4     export ANSIBLE_FORCE_COLOR=true
  5 fi
  6 # Log everything from this script into _quickstart.log
  7 echo "$0 $@" > _quickstart.log
  8 exec &> >(tee -i -a _quickstart.log )
  9 # With LANG set to everything else than C completely undercipherable errors
 10 # like "file not found" and decoding errors will start to appear during scripts
 11 # or even ansible modules
 12 LANG=C

[root@localhost quickstart_images]# sh quickstart.sh -u file:///usr/share/quickstart_images/undercloud-mitaka.qcow2 localhost
quickstart.sh: line 8: syntax error near unexpected token `>'
quickstart.sh: line 8: `exec &> >(tee -i -a _quickstart.log )'
[root@localhost quickstart_images]# 

답변1

첫 번째bash: 스크립트를 실행하는 대신 실행 가능하게 만듭니다.sh

chmod +x quickstart.sh

직접 실행해 보세요.

./quickstart.sh -u file:///usr/share/quickstart_images/undercloud-mitaka.qcow2 localhost

두번째: Bash 스크립트에 문제가 있는 것 같습니다.

스크립트를 실행하세요https://www.shellcheck.net/스크립트에 다음 오류가 보고됩니다.

Line 7:
echo "$0 $@" > _quickstart.log
         ^-- SC2145: Argument mixes string and array. Use * or separate argument.

당신이 직면하고 있는 문제는혼합 그리고대량으로.

다음 방법 중 하나를 사용하여 이 문제를 해결할 수 있습니다.

  1. 두 개의 서로 다른 따옴표로 구분된 인수를 사용하여 문자열과 배열을 혼합하지 마세요.

    echo "$0" "$@" > _quickstart.log
    

또는

  1. $@다음으로 바꾸기는 $*배열을 문자열로 바꿉니다.

    echo "$0 $*" > _quickstart.log
    

$@다음의 차이점을 참고하세요 $*.

Bash 특수 매개변수

($*)1부터 시작하는 위치 매개변수로 확장됩니다. 확장이 큰따옴표 안에 있지 않으면 각 위치 인수가 별도의 단어로 확장됩니다. 이러한 단어는 실행되는 컨텍스트에서 단어 분할 및 경로 이름 확장이 추가로 적용됩니다. 큰따옴표 내에서 확장이 발생하면 IFS 특수 변수의 첫 번째 문자로 구분된 각 인수의 값을 사용하여 단일 단어로 확장됩니다..즉, "$*"는 "$1c$2c..."와 같습니다., 여기서 c는 IFS 변수 값의 첫 번째 문자입니다. IFS가 설정되지 않은 경우 매개변수는 공백으로 구분됩니다. IFS가 비어 있으면 매개변수를 연결할 때 구분 기호가 삽입되지 않습니다.

($@)1부터 시작하는 위치 매개변수로 확장됩니다.큰따옴표 내에서 확장이 발생하면 각 인수가 별도의 단어로 확장됩니다. 즉, "$@"은 "$1" 및 "$2"와 동일합니다....단어 내에서 큰따옴표 확장이 발생하는 경우 첫 번째 인수의 확장은 원래 단어의 시작 부분과 연결되고 마지막 인수의 확장은 원래 단어의 마지막 부분과 연결됩니다. 위치 인수가 없으면 "$@" 및 $@는 아무것도 확장되지 않습니다(즉, 삭제됩니다).

관련 정보