我正在尝试运行 bash 命令
gcloud compute ssh "instanceName" -- "sudo reboot"
使用另一个内部 bash 命令(它只给出实例的名称)
gcloud compute instances list | grep auth- | awk '{print $1}')
因此它打印auth-tqcl
- 不带任何引号的实例名称。这很好。
整个命令如下所示:
gcloud compute ssh "$(gcloud compute instances list | grep auth- | awk '{print $1}')" -- "sudo reboot"
我有错误:
值“auth-tqcl”无效。值必须与以下正则表达式匹配。
所以看起来我'
在实例名称之前和之后有额外的字符'auth-tqcl'
::
gcloud compute ssh 'auth-tqcl' -- 'sudo reboot'
但是当我复制粘贴这个准备好的命令并在没有内部 bash 命令的情况下运行它时,它工作正常。
所以我的问题是:执行 bash 命令时如何摆脱多余的'
内容'auth-tqcl'
$(gcloud compute instances list | grep auth- | awk '{print $1}')
在另一个 bash 命令中。
我在 mac os 中使用标准终端。
更新
这是额外报价的证明:
$ set -x; gcloud compute ssh "$(gcloud compute instances list | grep auth- | awk '{print $1}')" -- "sudo reboot"; set +x;
++(:1): myMac $ gcloud compute instances list
++(:1): myMac $ grep auth-
++(:1): myMac $ awk '{print $1}'
+(:9): myMac $ gcloud compute ssh 'auth-tqcl' -- 'sudo reboot'
ERROR: (gcloud.compute.ssh) Could not fetch resource:
- Invalid value 'auth-tqcl'. Values must match the following regular expression: '[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?'
更新2
gcloud compute instances list | grep auth-
响应不带引号:
$ gcloud compute instances list | grep auth-
auth-tqcl europe-west1-b n1-standard-1 xx.xxx.x.x xx.xxx.xx.xx RUNNING
更新3
$ gcloud compute instances list | grep auth- | awk '{print $1}' | od -c
0000000 033 [ 1 ; 3 7 ; 4 1 m 033 [ K a u t
0000020 h - 033 [ m 033 [ K t q c l \n
0000035
答案1
为了解决这个问题,我需要禁用 grep 颜色:
这有效:
gcloud compute ssh "$(gcloud compute instances list | GREP_OPTIONS= grep auth- | awk '{print $1}')" -- "sudo reboot"