脚本失败并显示意外标记>'

脚本失败并显示意外标记>'

运行以下脚本时,出现错误。怎么解决这个问题呢?

  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. Replaceing $@with$*将数组替换为字符串

    echo "$0 $*" > _quickstart.log
    

$@请注意和之间的区别$*

Bash 特殊参数

($*)扩展到位置参数,从 1 开始。当扩展不在双引号内时,每个位置参数都会扩展为一个单独的单词。在执行它的上下文中,这些单词会受到进一步的单词分割和路径名扩展。 当扩展发生在双引号内时,它扩展为单个单词,每个参数的值由 IFS 特殊变量的第一个字符分隔即“$*”等价于“$1c$2c…”,其中 c 是 IFS 变量值的第一个字符。如果未设置 IFS,则参数之间用空格分隔。如果 IFS 为空,则连接参数时不插入分隔符。

($@)扩展到位置参数,从 1 开始。当扩展发生在双引号内时,每个参数都会扩展为一个单独的单词。即“$@”等价于“$1”“$2”……如果双引号扩展发生在单词内,则第一个参数的扩展与原始单词的开头部分连接,最后一个参数的扩展与原始单词的最后部分连接。当没有位置参数时,“$@”和$@ 扩展为空(即,它们被删除)。

相关内容