Трубный выход и состояние захвата выхода в Bash

Проблема в этой строке:

header("Content-type: application/json");

Я знаю, что это выглядит как правильный способ (в конце концов, application/json есть официальный MIME-тип для JSON контент), но это заставляет большинство браузеров представить вам диалог загрузки файлов, когда вы просто хотите увидеть текст. Вы можете использовать кодировку text/plain, чтобы избежать этого. Обратите внимание, что ваше приложение AJAX / iPhone / ..., вероятно, не заботится о типе контента, поэтому ваш API будет работать в обоих случаях.

Также см. этот пост в блоге , который предоставляет еще несколько контекстов.

379
задан codeforester 27 August 2018 в 04:09
поделиться

3 ответа

Существует внутренняя переменная Bash с именем $ PIPESTATUS ; это массив, который содержит статус выхода каждой команды в вашем последнем конвейере команд.

<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0

Или другой альтернативой, которая также работает с другими оболочками (например, zsh), было бы включение pipefail:

set -o pipefail
...

Первый вариант делает not работают с zsh из-за немного другого синтаксиса.

499
ответ дан 22 November 2019 в 23:41
поделиться

Есть массив, который дает вам статус завершения каждой команды в конвейере.

$ cat x| sed 's///'
cat: x: No such file or directory
$ echo $?
0
$ cat x| sed 's///'
cat: x: No such file or directory
$ echo ${PIPESTATUS[*]}
1 0
$ touch x
$ cat x| sed 's'
sed: 1: "s": substitute pattern can not be delimited by newline or backslash
$ echo ${PIPESTATUS[*]}
0 1
35
ответ дан 22 November 2019 в 23:41
поделиться

Нелепое решение: подключение их через именованный канал (mkfifo). Затем команду можно запустить второй.

 mkfifo pipe
 tee out.txt < pipe &
 command > pipe
 echo $?
119
ответ дан 22 November 2019 в 23:41
поделиться
Другие вопросы по тегам:

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