curl 命令无法通过 bash 中的 shell 脚本执行

curl 命令无法通过 bash 中的 shell 脚本执行

我正在学习 shell 脚本!为此,我尝试在 ubuntu(Ubuntu 16.04.3 LTS)终端上使用 curl 下载 TCGA 基因组数据。

sh. 内容

#!/bin/sh

echo /0c8a6022-b770-4a83-bac3-b1526a16c89a/;

token=$(<gdc-user-token.2018-06-26T14_36_13.548Z.txt)

export ec=18; while [ $ec -ne 0 ]; do curl -C - -H "X-Auth-Token: $token" 'https://api.gdc.cancer.gov/slicing/view/0c8a6022-b770-4a83-bac3-b1526a16c89a?region=chr9:131270948-131270948' > STAD/chr9:131270948-131270948_C440.TCGA-BR-6453-01A-11D-1800-08.3_gdc_realn.bam; export ec=$?;done

如果我运行 sh 脚本,下载的文件是空的,没有任何错误消息。

但如果直接运行命令那么它就可以正常工作。

如果有人能让我知道我在脚本中犯的错误,我将不胜感激。

答案1

您可能没有在 bash 中运行该脚本。

/bin/sh是 的符号链接/bin/dash,Ubuntu 中默认的非交互式 shell(自 6.10 版起)。dash不支持快捷命令$(<filename),因此您的token变量为空。

要使用 bash 执行脚本,请将 shebang 行更改为#!/bin/bash或明确调用bash script.sh

通常,如果您想要/需要使用特定的 shell,则应在 shebang 行中明确指定它。如果您希望脚本可移植,则可以指定#!/bin/sh,但随后必须确保您的脚本符合 POSIX 标准。例如,符合 POSIX 标准 的等价物$(<filename)$(cat filename)

相关内容