web-dev-qa-db-ja.com

curlから他のプログラムに複数のファイルをパイプします

(自己署名証明書を使用してサーバーから)いくつかの画像をダウンロードし、それらすべてをfehで表示したいと思います。これは単一のコマンドで可能ですか?何かのようなもの curl -sk -b path_to_session_token url1 url2 | feh --ただし、これはfehファイルの1つのみをフィードします。できれば、ファイルに保存して後で削除せずに。

1
EvenLisle

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

すべてを1行にまとめることも、関数を定義することもできることに注意してください。

$ 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に追加して、毎回手動で再定義しなくてもシェルで使用できるようにします。

完全を期すために、いくつかの一時ファイルを含む小さなスクリプト(もちろん関数にすることもできます)を次に示します。途中でいくつかのcurlおよびfehプロセスを保存します。バージョンによっては、 リモートファイル名を正しく取得できない場合があります (もちろん、画像に異なる名前を付けることができるため、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が複数回生成されず、すべての画像を一度にロードできることです(矢印キーを使用して画像を参照します)。

wgetを使用したCookie管理の詳細が必要な場合は、 このページ 、SSL/TLSオプションの詳細については このページ も参照してください。

2
John WH Smith