> и >> операторы не имеют никакого эффекта

#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 делает что-то, чего я не знаю, но я сомневаюсь в этом.