2016-02-23 9 views
3

Я хотел бы использовать фон амбунатора оболочки Bourne как часть команды выполнения ONE bsub.Применить в одной команде bsub фон оболочки Bourne ampersand

Обратите внимание, что я не хочу использовать .bash-файл, а одну командную строку bsub для выполнения всей процедуры.

Обратите внимание, что я также не хочу разделить содержимое моего bsub на несколько команд bsub, которые ждут друг друга, а скорее, чтобы обернуть в одну командную строку bsub несколько внутренних команд unix, которые ждут друг друга с помощью Фонтан скорлупы раковины.

Следующая попытка производила только вывод первой внутренней команды (команда liftOver), но ни сортировка, ни mv не выполнялись.

bsub -q medium -J $i "liftOver $i mm10ToMm9.over.chain.gz ${i/.bed/.mm9.bed} ${i/.bed/.unlifted_to_mm9.bed} & sort -k1,1 -k2,2n ${i/.bed/.mm9.bed} > ${i/.bed/.mm9.bed}.srt & mv ${i/.bed/.mm9.bed}.srt ${i/.bed/.mm9.bed}" 

Вне bsub эта процедура может быть записана следующим образом:

liftOver $i mm10ToMm9.over.chain.gz ${i/.bed/.mm9.bed} ${i/.bed/.unlifted_to_mm9.bed} & 
sort -k1,1 -k2,2n ${i/.bed/.mm9.bed} > ${i/.bed/.mm9.bed}.srt & 
mv ${i/.bed/.mm9.bed}.srt ${i/.bed/.mm9.bed} 
+0

Вы можете отделить отдельные команды от ';', и если я правильно помню, 'bsub' также позволяет считывать команду из stdin, что означает, что вы можете прокладывать три строки. Однако, почему вы хотите выполнить три команды параллельно ???? Не имеет смысла запускать 'mv', прежде чем' sort' не будет закончен. – user1934428

+0

ОК, я ошибаюсь. три команды были фактически разделены символом ";" внутри обрезания bsub, но хотя они были разделены символом ";" они начали работать параллельно, а я хочу, чтобы они подождали друг друга. Я не уверен, что могу всегда выполнять все мои команды (так как в некоторых случаях некоторые команды требуют генерации выходного файла). Я хочу избежать запуска mv перед сортировкой. – Roy

+1

Вопрос: Что такое 'bsub'? В чем разница с командой cron 'batch'? –

ответ

1

Я не знаю bsub, но я мог бы, возможно, дать вам трюк я использую с batch, ssh и некоторые другие различались снаряды:

bsub -q medium -J $i <<<"liftOver $i mm10ToMm9.over.chain.gz ${i/.be/.mm9.bed} ${i/.bed/.unlifted_to_mm9.bed} && 
    sort -k1,1 -k2,2n ${i/.bed/.mm9.bed} > ${i/.bed/.mm9.bed}.srt && 
    mv ${i/.bed/.mm9.bed}.srt ${i/.bed/.mm9.bed}" 

Может быть, вы должны изменить двойные кавычки (") для котировок ('), если $i должны быть разработаны с помощью bsub (опять же, я не знаю, этот продукт)

или

bsub -q medium -J $i <<-eocmd 
    liftOver $i mm10ToMm9.over.chain.gz ${i/.be/.mm9.bed} \ 
     ${i/.bed/.unlifted_to_mm9.bed} && 
    sort -k1,1 -k2,2n ${i/.bed/.mm9.bed} > ${i/.bed/.mm9.bed}.srt && 
    mv ${i/.bed/.mm9.bed}.srt ${i/.bed/.mm9.bed} 
     eocmd 

(предостерегают: только табуляция $'\t' может быть помещен перед словом eocmd)

Опять же, вы, возможно, придется бежать $ знак, если $i должны быть разработаны по bsub.

Для работы вокруг $TERM среды не установлен, я использую иногда:

bsub -q medium -J $i /bin/bash <<-eocmd 
    ... 
     eocmd 

В надежде, что это может сделать эту работу.

+0

спасибо alot @F. Hauri. Ваше решение работает для меня! Это окончательная версия, которую я сейчас использую в моем коде: * Обратите внимание, что в действительности вторая команда - awk - где используются знаки доллара или ("), они должны быть экранированы (\) Именно решение I искал! Tnx bsub -q medium -J $ i <<< "liftOver $ i mm10ToMm9.over.chain.gz $ {i/.bedGraph/.mm9.bedGraph} $ {i/.bedGraph/.unlifted_to_mm9. bedGraph} && sort -k1,1 -k2,2n -k3,3n $ {i/.bedGraph/.mm9.bedGraph} | awk '! x [\ $ 1, \ $ 2, \ $ 3] ++' FS = \ "\\ t \"> $ {i/.bedGraph/.mm9.srt.bedGraph} && mv $ {i/.bedGraph/msgstr " – Roy