我正在学习 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)
。