У меня есть это:

/dev/null <& curl --silent "$url" \
  -H "Content-Type: application/json" \
  -X POST \
  -d "$(cat <<EOF
{"state":"failure","context":"continuous-integration/jenkins","description":"Jenkins","target_url":"$BUILD_URL"}
EOF
)"

Я считаю, что это работает (но может и нет):

/dev/null < curl --silent "$url" \
  -H "Content-Type: application/json" \
  -X POST \
  -d "$(cat <<EOF
{"state":"failure","context":"continuous-integration/jenkins","description":"Jenkins","target_url":"$BUILD_URL"}
EOF
)"

Есть ли способ перенаправить как stdout, так и stderr, используя обозначение типа <&? Я на Баше 4.

update, вторая версия тоже не работает, получаю:

bash: curl: нет такого файла или каталога

0
Alexander Mills 22 Янв 2020 в 05:27
Файл, который вы перенаправляете в/из, идет после оператора перенаправления; используйте &> /dev/null вместо /dev/null <&.
 – 
Gordon Davisson
22 Янв 2020 в 05:35
1
Следующий вопрос - почему foo << echo bar не добавляет bar в файл foo ;-)
 – 
mosvy
22 Янв 2020 в 07:08

1 ответ

Лучший ответ

Вы можете поместить перенаправление в начале или в конце команды, но это должно быть перенаправление output с использованием >. Пытаться

curl .... &> /dev/null

Или (реже и менее читаемо IMO):

&> /dev/null curl ....
2
NickD 23 Янв 2020 в 21:10
Спасибо, какое объяснение, почему/как работает &> /dev/null curl ... ?
 – 
Alexander Mills
22 Янв 2020 в 20:57
Она ничем не отличается от первой формы (хотя встречается редко: большинство предпочитает использовать первую фирму - она ​​приятнее для глаз), но синтаксис оболочки допускает и то, и другое. Единственная причина, по которой я включил это, заключается в том, что вы, похоже, предпочли сначала перенаправление.
 – 
NickD
22 Янв 2020 в 21:01
1
Вероятно, лучше избегать необычных форм синтаксиса и использовать ожидаемый стиль command &> file. Легче всем, правда.
 – 
roaima
23 Янв 2020 в 20:58
Согласованный. Добавил немного редакционного мнения.
 – 
NickD
23 Янв 2020 в 21:10