Как загрузить URL-адреса данных из командной строки?

Вы можете использоватьset -e:

(set -e;
for what in \
   cache \
   thumbs;
do my template $what:clear; done)

set -eвызывает выход из оболочки, когда команда завершается с кодом выхода, отличным от -нулевым, и сбой не обрабатывается каким-либо другим образом. В приведенном выше примере вся подоболочка завершает работу в случае сбоя my..., а код выхода подоболочки — это код выхода неудачной команды. Это работает в сценариях оболочки и в командной строке.

Другой подход заключается в использовании дизъюнкции:

for what in \
   cache \
   thumbs; do
    my template $what:clear || break
done

Недостатком этого является требование || breakпосле каждой команды и проглатывание кода выхода, указывающего на сбой; цикл forкаждый раз будет выходить с нулевым кодом выхода. Этого можно избежать, сделав breakнеудачным, что приведет к завершению цикла forс кодом выхода 1 (, что все же не так хорошо, как описанный выше подход подоболочки ):

.
for what in \
   cache \
   thumbs; do
    my template $what:clear || break -1 2>/dev/null
done

(break -1вызывает breakвыход с ненулевым -кодом выхода, а 2>/dev/nullотбрасывает свое сообщение об ошибке ).

Насколько я знаю, вы не можете использовать &&для выхода из цикла, как в && doneили что-то подобное.

0
04.12.2020, 21:21
2 ответа

Схема data:является локальной в контексте веб-страницы, тогда как и wget, и curlработают с удаленными данными. Возможно, вы действительно ищете base64 -d, который позволяет декодировать такие данные.

Наконец, схема data URI может быть намного длиннее/больше, чем позволяет ваша оболочка, см. :https://stackoverflow.com/a/41755526, и я сомневаюсь, что вы хотите хранить так много случайных данных в истории оболочки.

0
18.03.2021, 22:46

Дополнение к ответу Артема.

Вы можете загрузить xclip через менеджер пакетов и использовать сценарий оболочки. (Вам следует скопировать URL-адрес данных):

#! /usr/bin/bash

data=$(xclip -out -selection clipboard)

ext=${data#*/}
ext=${ext%%;*}
ext=${ext/jpeg/jpg}

if [ $1 ]; then
        filename=$1
else
        filename=file
fi

echo "${data#*,}" | base64 -d > $filename.$ext

Без аргументов имя файла сохраняется как файл, в противном случае это ваш первый аргумент.

Редактировать :Улучшен скрипт --благодаря отличному комментарию Фредди.

0
18.03.2021, 22:46

Теги

Похожие вопросы