Привет У меня есть своеобразная проблема, и я стараюсь, чтобы найти (каламбур) решение для него.Pipe Найти команду "stderr" команде
$> find ./subdirectory -type f 2>>error.log
Я получаю сообщение об ошибке, что-то вроде «найти: ./subdirectory/noidea: Разрешение отказано» из этой команды, и это будет перенаправлен на error.log.
Есть ли способ, я могу конвейер STDERR в другую команду перед перенаправлением на error.log?
Я хочу быть в состоянии сделать что-то вроде
$> find ./subdirectory -type f 2 | sed "s#\(.*\)#${PWD}\1#" >> error.log
, где я хочу, чтобы трубы только STDERR к СЭД команду и получить весь путь ошибки команды находят.
Я знаю, что трубопровод здесь не работает и, вероятно, не самый подходящий способ.
Моя проблема в том, мне нужно как стандартный вывод и STDERR и оба должны быть обработаны с помощью различных вещей одновременно.
EDIT: ОК. Небольшое изменение моей проблемы.
Теперь у меня есть скрипт, solve_problem.sh
В этом сценарии оболочки, у меня есть следующий код
ErrorFile="error.log"
for directories in `find ./subdirectory -type f 2>> $ErrorFile`
do
field1=`echo $directories | cut -d/-f2`
field2=`echo $directories | cut -d/-f3`
done
Та же проблема, но внутри сценария оболочки. Ошибка «find: ./subdirectory/noidea: Permission denied» должна перейти в $ ErrorFile и . Stdout должен быть присвоен переменной $ справочникам.
Это полезный метод, но следует проявлять осторожность. В частности, у вас теперь есть сообщения об ошибках find, которые записываются в stdout с префиксом «STDERR:», а stdout поиска, идущего в stderr с префиксом «STDOUT:» Это потенциально запутывает. –
@kupson: Очень удобное решение.Но я не уверен, что это сработает по моему сценарию. Я пробовал что-то вроде '(find ./subdirectory/ -type f) 3> & 2 2> & 1 1> & 3 | sed 's?^\ (find: \) \ (. * \)? \ 1 $ {PWD}/\ 2? " >> $ ErrorFile', но это не сработало для меня. Ошибки перенаправляются в файл журнала так, как я хочу, но _stdout_ не получает привязанный к переменной в цикле for (я обновил свою проблему) – latestVersion
@latestVersion Я бы использовал цикл while в этой ситуации. – kupson