Intereting Posts
Используя ip, что означает M-DOWN? Каков максимальный раздел, поддерживаемый в Linux? Как установить Ubuntu на динамический диск Windows (схема MBR)? Как связать файл по сети? Как я могу получить последний номер строки уникальных команд, когда grepping мой файл истории? Как обновить шлюз с помощью nmcli Параметры сценария оболочки передаются в подкоманду Почему «echo f» в случае очистки таблицы conntrack не работает на debian? ffmpeg пакетное преобразование .avi в .mp4 – в золе Расширение Xvideo не работает с драйвером Radeon Почему Gnome или KDE не производят собственный дистрибутив (или другие проекты для настольных компьютеров, если на то пошло)? dhclient выходы со статусом 0, но все равно нет адреса Клавиша отключения для солнечной батареи с последовательным разъемом Новая раскладка клавиатуры Apple на Arch Linux делает головной вход> вывод копирует все невидимые символы в новый файл?

Используйте файл HERE и перенаправляйте вывод команды

У меня есть следующий код в пакетном скрипте:

mpirun -np 6 ./laplace <<END 100 100 100 0.01 100 3 2 1 END | tail -n 1 > output 

Но он не работает. То, что я хочу сделать, это использовать файл HERE в качестве входа в команду mpirun, а затем передать вывод команде хвоста. Тем не менее, я думаю, что файлы ЗДЕСЬ и выходные данные путают.

Как мне написать это, чтобы он делал то, что я хочу?

То, что вы написали в первой строке, выглядит как полная команда («составной» список «в терминологии оболочки»), поэтому оболочка рассматривает ее как полную команду. Поскольку маркер начала здесь-документа ( <<END ), оболочка затем считывает содержимое здесь-документа и затем запускает новую команду. Если вы хотите разместить здесь-документ в середине списка, вам нужно указать оболочке, что список не завершен. Вот несколько способов.

 mpirun -np 6 ./laplace <<END | … END tail -n 1 > output 
 { mpirun -np 6 ./laplace <<END … END } | tail -n 1 > output 

Или, конечно, вы можете убедиться, что команда полностью вписывается в первую строку.

 mpirun -np 6 ./laplace <<END | tail -n 1 > output … END 

Правило, которое следует помнить, заключается в том, что содержимое здесь-документа начинается после первой строки без кавычек после индикатора <<END . Например, вот еще один запутанный способ написания этого скрипта:

 mpirun -np 6 ./laplace <<END \ | tail -n $( … END echo 1) > output 
 mpirun -np 6 ./laplace <<END | tail -n 1 > output 100 100 100 0.01 100 3 2 1 END