【问题标题】:Shell script 'read' doesnt work with 'EOF'Shell 脚本“读取”不适用于“EOF”
【发布时间】:2022-01-08 13:44:12
【问题描述】:

下面的这个脚本正在运行,我想从文件 svc1.data 中读取一个值并在语法中使用它。

administrator@dev-91:~$ while read -r name port ignored; do echo $name $port ; done <svc1.data
bendita-nussa 4003

但是下面的这个脚本不起作用,它一直说:-bash: syntax error near unexpected token `;'

administrator@dev-91:~$ while read -r name port ignored; do
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: $name
  namespace: nussa
spec:
  hosts:
    - $name.nussa.svc.cluster.local
  http:
    - route:
        - destination:
            host: $name
            port:
              number: $port
            subset: v1
; done <svc1.data

请帮忙,第二个脚本有什么问题..

【问题讨论】:

  • 这个问题看起来只是一个印刷错误。 &lt;&lt;EOF always 最后需要一个配对的EOF;这与其他任何 heredoc 使用没有什么不同。
  • @CharlesDuffy :你当然是对的,但错误不应该是 done missingunexpected end-of-file,而是意外的分号

标签: linux bash shell sh


【解决方案1】:

只需关闭 HEREDOC,如下所示:

while read -r name port ignored; do
kubectl apply -f - <<EOF
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: $name
  namespace: nussa
spec:
  hosts:
    - $name.nussa.svc.cluster.local
  http:
    - route:
        - destination:
            host: $name
            port:
              number: $port
            subset: v1
EOF
done <svc1.data

【讨论】:

    猜你喜欢
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 1970-01-01
    • 2014-11-05
    • 2015-11-13
    • 2019-08-09
    • 1970-01-01
    相关资源
    最近更新 更多