Bash curl命令在shell脚本中不起作用,但在站点中运行良好
我正在努力使用一个小的bashshell脚本,它应该列出我的csv文件,并使用curl将它们上传到外部服务。 当我将命令变量回显到控制台并执行它时,我工作正常, 但当我在脚本中执行它时,它会抱怨额外的qouta” 我的脚本是这样的Bash curl命令在shell脚本中不起作用,但在站点中运行良好,bash,shell,curl,sh,Bash,Shell,Curl,Sh,我正在努力使用一个小的bashshell脚本,它应该列出我的csv文件,并使用curl将它们上传到外部服务。 当我将命令变量回显到控制台并执行它时,我工作正常, 但当我在脚本中执行它时,它会抱怨额外的qouta” 我的脚本是这样的 #!/usr/bin/bash LOGDIR="/var/log/tyk/" FILE_EXSTENSION_NAME="*.csv" CURLCMD="curl -k -i -H" PORT="9992" ENDPOINT="/endpoint" URL="http
#!/usr/bin/bash
LOGDIR="/var/log/tyk/"
FILE_EXSTENSION_NAME="*.csv"
CURLCMD="curl -k -i -H"
PORT="9992"
ENDPOINT="/endpoint"
URL="https://localhost"
for i in `ls $LOGDIR$FILE_EXSTENSION_NAME`; do
filename=`echo $i | awk -F "/" ' { print $5 }'`
echo $filename
CMD="$CURLCMD \"filename: $filename\" -F \"data=@$LOGDIR$filename\" $URL:$PORT$ENDPOINT"
$CMD
done
当我运行它时,我得到以下输出
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:--0curl: (6) Could not resolve host: 2018-October-18-10.csv"; Unknown error
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (26) couldn't open file "/var/log/tyk/2018-October-18-10.csv""
如果我在脚本中执行echo$CMD,我得到
curl -k -i -H "filename: 2018-October-18-10.csv" -F "data=@/var/log/tyk/2018-October-18-10.csv" https://localhost:9992/endpoint
这样行吗
我不知道我没有做错什么首先,不要将命令存储在变量中。 除此之外,还有两个问题:
$($CMD)
周围的子shell$()
看起来很可疑。不仅要执行存储在$CMD
中的命令,还要执行该命令的输出echo“ab”
时,bash
将处理该命令,以便使用参数ab
执行echo
。输出将是ab
当您将该命令存储在变量中并展开该变量时,bash
将以不同的方式处理该变量的内容。命令echo
将使用参数“a
和b”
执行。输出将是“a b”
这就是错误消息的原因
curl:(26)无法打开文件“/var/log/tyk/2018-10-18-10.csv”
curl
正在尝试打开一个包含实际引号的路径。您的系统上不存在这样的路径
为了解决这个问题,您可以编写eval“$cmd”
,然后执行命令,就像您直接输入一样。然而,你真的不应该。我将重写脚本,不将命令存储在变量中
2.周围的子shell$cmd
:
这将打印某些内容
。
但是,您的脚本并没有到此为止,因为您在$()
中包含了$cmd
。因此,也会执行输出something
cmd='echo something'
$($cmd)
导致
bash: something: command not found
首先,不要将命令存储在变量中。 除此之外,还有两个问题:
$($CMD)
周围的子shell$()
似乎可疑。不仅要执行存储在$CMD
中的命令,还要执行该命令的输出李>
1.变量内的引号
当您输入命令echo“ab”
时,bash
将处理该命令,以便使用参数ab
执行echo
。输出将是ab
当您将该命令存储在变量中并展开该变量时,bash
将以不同的方式处理该变量的内容。命令echo
将使用参数“a
和b”
执行。输出将是“a b”
这就是错误消息的原因
curl:(26)无法打开文件“/var/log/tyk/2018-10-18-10.csv”
curl
正在尝试打开一个包含实际引号的路径。这样的路径在您的系统上不存在
为了解决这个问题,您可以编写eval“$cmd”
,然后命令将像直接键入命令一样执行。但是,您确实不应该这样做。我将重写脚本,不将命令存储在变量中
2.围绕$cmd
的子shell:
这将打印某些内容
。
但是,您的脚本并没有到此为止,因为您在$()
中包含了$cmd
。因此,也会执行输出something
cmd='echo something'
$($cmd)
导致
bash: something: command not found
URL=“https:localhost”
-这是打字错误吗?您得到的确切错误消息是什么?您显示了一条无法打开文件的curl
错误消息,但您谈到了bash
中的“缺少引号”错误。这是什么?是的,这是URL=“its,因为我更改了它,所以我没有公开真正的URL。”。错误是:(26)无法打开文件“/var/log/tyk/2018-10-18-10.csv”“字符串末尾有两个配额,但在我的脚本中,我只设置了一个配额。文件存在-rw-r--r--。1 tyk tyk 1250 Oct 18 10:17/var/log/tyk/2018-10-18-10.csv请编辑您的原始问题以更正URL=
部分,并告诉我们您收到的确切错误消息。也许您不想调用awk
,而是想使用basename
工具来获取文件名?另外,使用ls-1
或更好的find
获取文件名列表。并在运行之前输出$CMD
,以便查看实际运行的内容。错误是curl:(26)无法打开文件“/var/log/tyk/2018-10-18-10.csv”“不要将命令放入变量中,直接执行它(请参见)。URL=“https:localhost“
-这是打字错误吗?您得到的确切错误消息是什么?您会显示一条curl
错误消息,说明它无法打开文件,但您会谈论bash
中的“缺少引号”错误。它是什么?是的,它是URL=“因为我更改了它,所以我没有公开真实的URL。错误是curl:(26)无法打开文件”/var/log/tyk/2018-10-18-10.csv”“字符串末尾有两个配额,但在我的脚本中我只设置了一个。文件存在-rw-r--r--。1 tyk tyk 1250 Oct 18 10:17/var/log/tyk/2018-10-18-10.csv请编辑您的原始问题以更正URL=
部分,并告诉我们您收到的确切错误消息。也许您不想调用awk
,而是想使用basename
工具来获取文件名?另外,使用ls-1
或更好的find
获取文件名列表。和输出<代码>$C