Рейтинг:1

вывод команды which в переменную не работает

флаг cg

Я просто новичок в написании сценариев bash. Я попытался сохранить вывод команды «который» в переменную и распечатать ее, но переменная ничего не показывает. Это код, который я пробовал:

#!/бин/баш
OUTPUT="$(какой завиток)"
эхо "${OUTPUT}"

Вывод:

пользователь@пользователь:~$ bash new.sh

пользователь@пользователь:~$

Также это работает, когда я запускаю его в терминале.

user@user:~$ OUTPUT="$(который завивается)"
эхо "${OUTPUT}"

завиток не найден
пользователь@пользователь:~$

Но дело в том, что он работает с другими командами.

#!/бин/баш
ВЫВОД = «$ (дата)»
эхо "${OUTPUT}"

Вывод:

пользователь@пользователь:~$ bash new.sh
Сб 07 авг. 2021 13:41:37 +0545
пользователь@пользователь:~$
bac0n avatar
флаг cn
Все еще немного любопытно, тот факт, что введенное вами сообщение об ошибке не может исходить от `what`, оно вообще не должно давать никакого сообщения, если, например, curl не существует?
Sammy1410 avatar
флаг cg
Что ж, выход был "завиток ", когда он найден, и он дал "завиток не найден", если он не установлен. Но последний вывод виден только в терминале, но не при использовании переменных оболочки.
bac0n avatar
флаг cn
если curl не установлен, т. е. если бинарный файл не существует, он вообще не должен выводить никаких сообщений. Вы можете открыть `what` в текстовом редакторе, это очень простой сценарий оболочки, сообщение "curl not found" должно прийти откуда-то еще. (и если curl существует, он должен вернуть путь, а не `curl` )
Sammy1410 avatar
флаг cg
Да похоже.Это был всего лишь небольшой фрагмент кода, который я пытался вставить в оператор if. Что ж, я обнаружил, что команда ```what``` возвращает логические данные, которые я мог бы использовать. Спасибо за помощь. Наконец, мой код работает, как и ожидалось.
Sammy1410 avatar
флаг cg
И извините за мою ошибку, ```которая``` вернула путь, а не версию. Я перепутал его с другими командами.
Рейтинг:4
флаг cn

Переменная принимает только значение, отправленное через STDOUT или выходной поток. Поскольку curl не может быть найден, вывод, который вы видите, представляет собой сообщение об ошибке, отправленное через STDERR или поток ошибок. Если вы хотите сохранить сообщение об ошибке в переменной в случае ошибки, сделайте следующее:

OUTPUT="$(который завивается 2>&1)"

Это направляет все данные из STDERR в STDOUT. 2 — это файловый дескриптор для STDERR, а 1 — файловый дескриптор для STDOUT.

Sammy1410 avatar
флаг cg
Я пробовал, но результат все тот же.
Sammy1410 avatar
флаг cg
Как предположил пользователь bac0n, ```который``` не давал никакого вывода, который можно было бы сохранить, когда пакет не был найден. Мне пришлось пойти другим путем, чтобы мой основной код заработал.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.