Могу ли я передать часть моих выводов bash-скриптов в файл?Могу ли я передать в файл и стандартный вывод? - PullRequest
0 голосов
/ 05 октября 2011

Я почти уверен, что видел, как это было сделано раньше, но я не могу найти это через Google.

for file in $mydir/*
do
    #redirect the rest to $myotherdir/$file.output.
    echo this should go to the $myotherdir/$file.output.
done

Было бы также здорово, если бы я мог использовать tee вместоперенаправление, так что он идет в этот файл и стандартный вывод.

Ответы [ 2 ]

1 голос
/ 05 октября 2011

Вы можете использовать любой из трех методов. Один из них иллюстрируется ответом dtmilano , использующим полную под-оболочку и круглые скобки, но будьте осторожны с предыдущим выводом:

outfile=/$myotherdir/$file.output

for file in $mydir/*
do
    (
    ...commands...
    ) >> $outfile
    ...other commands with output going elsewhere...
done

Или вы можете использовать фигурные скобки для группировки перенаправления ввода / вывода без запуска под-оболочки:

outfile=/$myotherdir/$file.output

for file in $mydir/*
do
    {
    ...commands...
    } >> $outfile
    ...other commands with output going elsewhere...
done

Или вы можете иногда использовать exec:

exec 1>&3    # Preserve original standard output as fd 3
outfile=/$myotherdir/$file.output

for file in $mydir/*
do
    exec 1>>$outfile
    ...standard output
    exec 1>&3
    ...other commands with output going to original stdout...
done

Обычно я использую нотацию { ... }, но в однострочном сценарии она капризна; } должен появиться там, где может начинаться команда:

{ ls; date; } >/tmp/x37

Здесь нужна вторая точка с запятой.

1 голос
/ 05 октября 2011

Я думаю, это то, что вы хотите

for file in $mydir/*
do
   (
     commands
     ...
   ) > /$myotherdir/$file.output
   echo this should go to the $file > $file
done
...