通过管道将多个文件从curl传输到其他程序

通过管道将多个文件从curl传输到其他程序

我想下载几个图像(从具有自签名证书的服务器)并使用feh.这可以通过单个命令实现吗?类似于curl -sk -b path_to_session_token url1 url2 | feh -- 只不过这只提供了feh其中一个文件。最好不要保存到文件并随后将其删除。

答案1

feh将无法区分在其标准输入上发送的多个图像,除非实现某种“协议”。

如果你不想使用临时文件,你可以使用循环:

for url in 'url1' 'url2'; do
    curl -skb token "$url" | feh -
done

这将依次下载并显示每张图像。如果您希望在“同时”,添加一点 & 符号:

for url in 'url1' 'url2'; do
    (curl -skb token "$url" | feh - &)
done

请注意,您可以将所有内容放在一行中,或者定义一个函数:

$ for url in 'url1' 'url2'; do curl -skb token "$url" | feh -; done
$ for url in 'url1' 'url2'; do (curl -skb token "$url" | feh - &); done

function feh_urls
{
    for url; do
        curl -skb token "$url" | feh -
    done
}

$ feh_urls 'url1' 'url2'

请小心引用,因为您的 URL 或路径中可能存在一些烦人的空格(...我希望我在上面的例子中没有犯这样的错误...)。如果您需要一个函数,也许可以将其添加到您的函数中.bashrc,这样您就可以在 shell 中使用它,而无需每次都手动重新定义它。

为了完整起见,这里有一个小脚本(当然可以成为一个函数),涉及一些临时文件,保存一些临时文件curlfeh进程。我使用的是wget而不是curl因为根据你的版本,您可能无法正确获取远程文件名(当然,您可以为图像指定不同的名称)。

#!/bin/bash

img_dir=$(mktemp -d)
cd $img_dir
wget -q --no-check-certificate --load-cookie token "$@"
feh $img_dir/*
rm -r $img_dir

用法:

$ ./feh_urls.sh 'url1' 'url2'

请注意,这里的优点是feh不会多次生成,并且可以一次加载所有图像(使用箭头键浏览它们)。

你也可能对此有兴趣这一页如果您想了解有关 cookie 管理的更多信息wget,或者这一页有关 SSL/TLS 选项的详细信息。

相关内容