#linux #cat
#linux #cat
Вопрос:
при попытке записать выходные данные php-скрипта в файл я получаю самую странную ошибку. Я использую:
#php daily.php > error/daily
Ну, все, что это делает, это выводит его в консоль в любом случае. Файл (ошибка / ежедневно) не затронут.
ошибка / ежедневно имеет chmod 777. Различные конструкции, такие как
#php daily.php >> error/daily
тоже не работают. Вывод daily.php просто продолжает выводиться в консоль…
Есть какие-нибудь идеи по этому поводу? :/ Заранее спасибо!
Обновить:
Теперь, используя
#php daily.php 2> error/daily
он ничего не выводит в консоль.
Но ошибка / daily не затронута, в нее ничего не записано.
Еще одно ОБНОВЛЕНИЕ:
#php daily.php 2>> error/daily
работает как ожидалось (добавляет вывод ошибки в файл), в то время как
#php daily.php 2> error/daily
просто очищает файл и ничего в него не записывает.
Есть идеи, почему это может происходить?
Ответ №1:
Так это в командной строке? Эти круглые скобки приводят к выполнению вложенной команды при новом вызове командной строки; перенаправления будут применяться к выходным данным самой командной строки, которых нет. Команды, которые выполняет оболочка, все равно будут выводить свои выходные данные на консоль. Просто уберите круглые скобки; они не нужны и являются источником вашей проблемы.
Комментарии:
1. Нет, на самом деле я добавил круглые скобки, потому что без них это не работало. Я подумал, может быть, это сработает. Что ж, поскольку они не имеют никакого значения, я отредактирую свой вопрос и удалю их.
2. Ну, я подумал, не было ли это каким-то странным свойством самого
php
исполняемого файла, поэтому я попробовал это в своей системе; это сработало нормально. Очень странно.3. Да, я позволил двум друзьям попробовать это на своих компьютерах — сработало нормально. Действительно странно.
Ответ №2:
В терминале программы имеют два вывода: стандартный вывод и вывод ошибок. По умолчанию оба отображаются в консоли.
Оператор > (и >>) перенаправляет стандартный вывод в файл, но оставляет вывод ошибки в консоли.
Поскольку кажется, что вы пытаетесь перенаправить ошибки в файл, php, должно быть, записывает в вывод ошибки. Чтобы выполнить то, что вы хотите сделать, вы должны сделать
php daily.php 2> error/daily
Если вы хотите перенаправить оба вывода, вы также можете сделать
php daily.php 2> error/daily 1>amp;2
Редактировать: не делайте этого.
Если вы хотите перенаправить оба вывода, перенаправьте в разные файлы. Например:
php daily.php 2> error/daily 1> output.txt
Комментарии:
1. Хорошо, я попробую это, спасибо. Но стандартный вывод, по-видимому, был отброшен вместо записи в error / daily, потому что файл был нетронут. —редактировать: Да, когда я использую 2>, он ничего не выводит. Но файл снова остается нетронутым.
2. Я не знаю, что ваш daily.php влияет, но возможно, что из стандартного вывода ничего не выходит. Что-то, что, вероятно, для сценария обслуживания, выполняемого ежедневно.
3. Что ж, это становится еще более странным. #php daily.php 2> ошибка / daily очищает файл и ничего в него не записывает. #php daily.php 2>> ошибка / ежедневно записывает ошибки в файл (как в, работает так, как мне нужно). Итак … почему #php daily.php 2> ошибка / ежедневно не работает?
4. И 2>> записывает как ошибку, ТАК И стандартный вывод в файл. (без добавления 1>amp;2)
5. Похоже, я допустил ошибку. Не добавляйте 1> amp; 2 , вот почему ваш файл пуст в первом случае, поскольку файл стирается для записи ошибки, а затем стирается снова для записи стандартной ошибки. Вы уверены, что в стандартном выводе действительно что-то есть? Если вы не добавили 1> amp; 2, я не уверен, что смогу вам помочь. Возможно, php делает что-то, чего я не знаю, но я сомневаюсь в этом.