перенаправление вывода внутри команды bsub - PullRequest
0 голосов
/ 30 мая 2018

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

bsub -q short "cat <(head -2 myfile.txt) > outputfile.txt"

В настоящее время выполнение этого bsub завершается неудачно.Также мои попытки избежать знака перенаправления и круглых скобок не увенчались успехом, таких как:

bsub -q short "cat \<\(head -2 myfile.txt\) > outputfile.txt"
bsub -q short "cat <\(head -2 myfile.txt\) > outputfile.txt"

* Обратите внимание, я хорошо знаю, что перенаправление в этой простой команде не является необходимым, поскольку команда могла легкозаписать как:

bsub -q short "head -2 myfile.txt > outputfile.txt" 

, и тогда оно действительно будет выполнено правильно (без ошибок).Однако я заинтересован в реализации перенаправления вывода «<» в контексте более составленной команды, и я привожу эту простую команду здесь только в качестве примера.</p>

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

<(...) - это замена процесса - расширение bash недоступно для базовых оболочек POSIX.system(), subprocess.Popen(..., shell=True) и аналогичные вызовы используют /bin/sh, который не гарантирует наличие таких расширений.


В качестве механизма, который работает с любой возможной командой, не беспокоясь о том, как правильноэкранируя его в строку, вы можете экспортировать эту функцию и любые переменные, которые она использует, через окружение:

# for the sake of example, moving filenames out-of-band
in_file=myfile.txt
out_file=outputfile.txt

mycmd() { cat <(head -2 <"$in_file") >"$out_file"; }

export -f mycmd                # export the function into the environment
export in_file out_file        # and also any variables it uses

bsub -q short 'bash -c mycmd'  # ...before telling bsub to invoke bash to run the function
0 голосов
/ 30 мая 2018

<(...) - это функция bash, в то время как ваша команда работает с sh.

Явно вызывайте bash для управления функциями только для bash:

bsub -q short "bash -c 'cat <(head -2 myfile.txt) > outputfile.txt'"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...