Как перенаправить вывод 'cat' в другую папку?

У меня есть сценарий Python, EulerianCycle.py, и входной файл, euleriancycle.txt.

Я могу получить правильные результаты, выполнив py EulerianCycle euleriancycle.txt > cat euleriancycleout.txt в текущей папке (py - это псевдоним для python3).

Однако в текущей папке у меня есть еще одна папка под названием outputs, в которую я хочу направить все мои выходные файлы.

Я пробовал py EulerianCycle.py euleriancycle.txt | cd outputs/ | cat > euleriancycleout.txt

И py EulerianCycle.py euleriancycle.txt | cat >cd outputs/euleriancycleout.txt

что дает мне ошибку broken pipe.

3
задан 6 July 2021 в 12:39

3 ответа

Если py EulerianCycle.py euleriancycle.txt записывает в стандартный поток вывода (что, я полагаю, так и есть, поскольку в противном случае вы не смогли бы передать его по конвейеру cat ), тогда cat здесь совершенно излишни - вы можете перенаправить стандартный вывод напрямую, указав абсолютный или относительный путь к вашему выходному файлу:

py EulerianCycle.py euleriancycle.txt > outputs/euleriancycleout.txt

(примечание: каталог output / уже должен существовать).


Ни одна из других ваших команд не работает так, как вы могли представить.

  • в py EulerianCycle euleriancycle.txt> cat euleriancycleout.txt , оболочка создает файл с именем cat в текущем каталоге и перенаправляет вывод py EulerianCycle , передав ему и euleriancycle.txt , и euleriancycleout.txt в качестве входных аргументов.

  • в py EulerianCycle.py euleriancycle.txt | cat> cd output / euleriancycleout.txt , оболочка создает файл с именем cd в текущем каталоге, cat читает output / euleriancycleout.txt и записывает его в файл cd , игнорируя стандартный ввод из канала ( cat читает только стандартный ввод, когда ему не заданы входные файлы, или явное - ).

Возможно, то, к чему вы здесь стремились, было направить вывод в подоболочку , например:

py EulerianCycle.py euleriancycle.txt | (cd outputs; cat > euleriancycleout.txt)

или

py EulerianCycle.py euleriancycle.txt | (cd outputs && cat > euleriancycleout.txt)

Здесь cat читает стандартный ввод подоболочки, то есть предоставленный каналом - после перехода в целевой каталог. Вторая версия создает только euleriancycleout.txt , если команда cd завершилась успешно; первый создает его в текущем каталоге в случае сбоя cd .

7
ответ дан 28 July 2021 в 11:22

Кроме того, вы можете использовать:

EulerianCycle.py | tee euleriancycleout.txt

для одновременной отправки содержимого в текстовый файл и на стандартный вывод. в 2-х отдельных потоках. Другими словами, содержимое попадет как в текстовый файл, так и на печать в терминале.

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

1
ответ дан 28 July 2021 в 11:22

Выяснилось, что могу использовать py EulerianCycle.py euleriancycle.txt | кошка> euleriancycleout.txt | mv -t output / euleriancycleout.txt

ИЛИ

py EulerianCycle.py euleriancycle.txt | cat> euleriancycleout.txt & mv -t output / euleriancycleout.txt

Все еще открыт для возможной команды, которая сделает это более кратко. :)

редактировать: представленный код неэффективен, см. Зеленую галочку, отмеченную ответом

-1
ответ дан 28 July 2021 в 11:22

Другие вопросы по тегам:

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