Проблема в этой строке:
header("Content-type: application/json");
Я знаю, что это выглядит как правильный способ (в конце концов, application/json
есть официальный MIME-тип для JSON контент), но это заставляет большинство браузеров представить вам диалог загрузки файлов, когда вы просто хотите увидеть текст. Вы можете использовать кодировку text/plain
, чтобы избежать этого. Обратите внимание, что ваше приложение AJAX / iPhone / ..., вероятно, не заботится о типе контента, поэтому ваш API будет работать в обоих случаях.
Также см. этот пост в блоге , который предоставляет еще несколько контекстов.
Существует внутренняя переменная Bash с именем $ PIPESTATUS
; это массив, который содержит статус выхода каждой команды в вашем последнем конвейере команд.
<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0
Или другой альтернативой, которая также работает с другими оболочками (например, zsh), было бы включение pipefail:
set -o pipefail
...
Первый вариант делает not работают с zsh
из-за немного другого синтаксиса.
Есть массив, который дает вам статус завершения каждой команды в конвейере.
$ 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
Нелепое решение: подключение их через именованный канал (mkfifo). Затем команду можно запустить второй.
mkfifo pipe
tee out.txt < pipe &
command > pipe
echo $?