Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash curl命令在shell脚本中不起作用,但在站点中运行良好_Bash_Shell_Curl_Sh - Fatal编程技术网

Bash curl命令在shell脚本中不起作用,但在站点中运行良好

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

我正在努力使用一个小的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="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
    中的命令,还要执行该命令的输出
  • 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.周围的子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