【问题标题】:Executable does not wait for curl to finish downloading可执行文件不等待 curl 完成下载
【发布时间】:2019-04-02 18:24:00
【问题描述】:

我有一个可执行文件,它应该从一个链接下载一个 zip 文件并解压缩它。

#!/bin/bash

echo “Downloading project resources from Storage...”

if curl -O -J -L https://mylink.com; then
    unzip filename.zip
else

    echo "Something went wrong"
fi;
echo "Done!"

但是,不知何故,我的脚本在解压缩文件之前不会等待curl 完成下载。我做错了什么?

输出:

MacBook-Pro:~ ej$ /Users/ej/Desktop/untitled\ folder\ 2/Setup ; exit;
“Downloading project resources from Storage...”
unzip:  cannot find or open file.zip, file.zip.zip or file.zip.ZIP.
Done!
logout
Saving session...  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
...copying shared history...
...saving history...truncating history files...
...completed.

[Process completed]

最后,在运行可执行文件的文件夹中没有下载或解压缩文件。

编辑 2:

ls -l 在终端运行 curl 命令后输出如下:

-rwxr--r--@ 1 ej  staff       390  2 Apr 21:42 Setup
-rw-r--r--  1 ej  staff  86368932  2 Apr 22:19 file.zip?alt=media

which bash 输出以下内容:

/bin/bash

附: MacBook 上是否预装了 curl?

【问题讨论】:

  • 你能粘贴你得到的确切输出吗?是什么让你觉得下载没有完成?
  • @akskap 我在上面编辑了我的问题。
  • 看起来您尝试使用unzip 访问的文件名与下载的文件名不同。在终端中运行 curl 命令后,您可以粘贴 ls -l 的输出吗?也请告诉which bash的输出
  • @akskap,再次更新
  • 感谢您提供详细信息 - 在下面发布了脚本的修订版

标签: bash shell unix command-line


【解决方案1】:

你可以用这个:

curl -O -J -L https://mylink.com && unzip filename.zip

如果 curl 执行成功,这将 uzip 文件。

【讨论】:

    【解决方案2】:

    建议对脚本进行以下更改:

    #!/usr/bin/env bash
    
    echo "Downloading project resources from Storage..."
    
    filename="outfile.zip"
    
    if curl --silent -o "${PWD}/${filename}" -L "https://mylink.com"; then
        unzip "${filename}"
        if [[ -f "${PWD}/${filename}" ]]; then
            echo "Removing the file.."
            rm -f "${PWD}/${filename}"
        fi
    else
        echo "Something went wrong"
    fi
    echo "Done!"
    
    

    【讨论】:

    • 我也会把 URL 放在引号中,以防它有 & 或类似的东西。
    • @akskap 这就像一个魅力。但是,它会将文件下载并解压缩到计算机的主目录中,而不是当前文件夹中。如何让它提取当前文件夹中的文件并在解压缩后删除zip文件?
    • 您可以使用路径名中的PWD(当前工作目录)变量和rm 命令在解压缩完成后删除文件。用新的变化修改了答案
    • @akskap 谢谢。现在它会删除 zip 文件,但该文件仍会下载并解压缩到计算机的主目录中,而不是当前文件夹中。什么可能导致此问题?
    猜你喜欢
    • 1970-01-01
    • 2021-11-22
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多