Intereting Posts
Поддерживают ли Linux-терминалы и шрифты с открытым исходным кодом лигатуры? Функциональные клавиши громкости распознаются, но не меняют громкость Используйте sed, чтобы заменить часть строки переменной Как захватить сообщение об ошибке из выполненной команды? Как настроить XFCE-скриншот, сохраняющий шаблон имени файла? Не удается загрузить файл в контейнере lxc Анонимный файл и папка / владелец Создайте несколько имен пользователей и UID в Linux с помощью сценария оболочки Как удалить ярлык Alt + правый клик из LXDE, чтобы он был доступен для приложений? Как я могу совместно использовать профиль thunderbird (icedove) в режиме реального времени между двумя компьютерами? Обычно скрипт работает, но не с cron Как запустить терминал с помощью сочетаний клавиш в Gnome 2? Как я могу создать android на моем debian при использовании eclipse? (проблема java-зависимостей) Как работает NAT-рефлекс (NAT loopback)? Как отправить сообщение электронной почты призрака?

Каков правильный способ читать stdin внутри назначения скобок 2-го канала

1-й тип, группа 2 для назначения, это работает:

$ myresult1=$(curl -L 'https://archive.org/wayback/available?url=stackoverflow.com' 2>/dev/null | jq '.archived_snapshots.closest.url'); echo "$myresult1" "http://web.archive.org/web/20160622184546/http://stackoverflow.com/" 

Второй стиль, присваивается только во 2-м канале, это не работает:

 $ curl -L 'https://archive.org/wayback/available?url=stackoverflow.com' 2>/dev/null | myresult2=$(jq '.archived_snapshots.closest.url'); echo "$myresult2" $ 

Поэтому мне интересно, можно ли сделать работу 2-го стиля, то есть, если я могу читать stdin внутри назначения скобок.

Ваша вторая команда работает, проблема в том, что вы используете bash или любую оболочку, которая помещает все компоненты конвейеров в подоболочку. myresult2 правильно установлен, но переменная сразу же выходит за пределы области действия, если вы не остаетесь в той же подоболочке, как здесь:

 curl -L 'https://archive.org/wayback/available?url=stackoverflow.com' \ 2>/dev/null | { myresult2=$(jq '.archived_snapshots.closest.url'); echo "$myresult2" ; } 

Если вы запустите эту команду под ksh , назначение переменной будет выполнено в самой верхней оболочке, поэтому она будет работать как ожидалось.

В качестве альтернативы вы можете установить параметр lastpipe для получения поведения ksh в bash :

 shopt -s lastpipe 

Если вы хотите, чтобы это работало в интерактивном сеансе, вы также должны отключить управление заданиями:

 set +m