Невозможно перенаправить вывод в FreeBsd

find -xtype l соответствует неработающим символическим ссылкам, поэтому

$ find /usr/share/man/man1 -mindepth 1 -maxdepth 1 -xtype l -ls
291592 0 lrwxrwxrwx 1 root root 16 Apr 25 00:09 /usr/share/man/man1/gcov-tool.1.gz -> gcov-tool-5.1.gz
291793 0 lrwxrwxrwx 1 root root 16 Apr 25 00:09 /usr/share/man/man1/i686-linux-gnu-gcov-tool.1.gz -> gcov-tool-5.1.gz

показывает, что якобы отсутствующие файлы, gcov-tool.1.gz и i686-linux-gnu-gcov -tool.1.gz на самом деле неработающие символические ссылки на отсутствующий файл gcov-tool-5.1.gz.

В Ubuntu файлы в /usr/share должны управляться менеджером пакетов, поэтому, если вы хотите вернуть этот файл, самый простой способ — найти пакет, которому принадлежит файл,

dpkg-query -S /usr/share/man/man1/gcov-tool-5.1.gz

и переустановите соответствующий пакет:

sudo apt-get install --reinstall <PACKAGE>

(gcov-tool-5.1 указывает на пакет gcc-5 устаревшей версии Ubuntu.)

0
16.12.2016, 10:44
2 ответа

Вы подошли вплотную, но ни один из них не является правильным синтаксисом для оболочки TENEX C.

Помните: интерактивная оболочка входа, которую вы используете во FreeBSD, если вы ее не изменили, является оболочкой TENEX C. При перенаправлении команды sudo должен использоваться синтаксис перенаправления оболочки TENEX C. Не имеет значения, что вы запускаете оболочку Bourne Again через sudo. Это определяется только после того, как перенаправление состоялось, и sudo уже был запущен.

Это:

% sudo bash some_file.sh arg1 >/dev/null 2>&1
фактически то же самое, что и
% >/dev/null >&1 sudo bash some_file.sh arg1 2
, который пытается перенаправить стандартный вывод дважды в два разных места.

Это:

% sudo bash some_file.sh arg1 &> /dev/null
на самом деле
% sudo bash some_file.sh arg1 & > /dev/null
и будет переписано как таковое в вашей истории команд. Это две команды, объединенные &, sudo и команда без имени и аргументов. Последнее не допускается в оболочке TENEX C.

Вот как перенаправить как стандартный вывод, так и стандартную ошибку на /dev/null в оболочке TENEX C:

% sudo bash some_file.sh arg1 >& /dev/null
2
28.01.2020, 02:19

Похоже, вы используете csh в командной строке (проверьте с помощью echo $ SHELL ).

  • Для перенаправления и stdout, и stderr используйте синтаксис csh: sudo bash some_file.sh arg1> & / dev / null
  • Или переместите перенаправление в «часть bash» команды с помощью sudo bash -c 'some_file.sh arg1> / dev / null 2> & 1'
2
28.01.2020, 02:19

Теги

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