Bash - Есть ли способ заменить команду bash параметрами каждый раз, когда вводится другой параметр? - PullRequest
0 голосов
/ 24 января 2020

Я работаю над HP C, работающим над slurm и CentOS. Моему программному обеспечению рабочего процесса (Nextflow v19.10.0) необходимо выполнить эту команду

squeue --noheader -o %i %t -t all -u username

Однако у меня возникает ошибка, возникает следующая ошибка

squeue: error: Unrecognized option: %
Usage: squeue [-A account] [--clusters names] [-i seconds] [--job jobid]  [-n name] [-o format] [-p partitions] [--qos qos] [--reservation reservation] [--sort fields] [--start]  [--step step_id] [-t states] [-u user_name] [--usage] [-L licenses] [-w nodes] [--federation] [--local] [--sibling]  [-ahjlrsv] 

Есть ли способ обернуть выше команда в моем файле .bashr c, поэтому, когда Nextflow запускает команду, она автоматически превращается в эту, которую я протестировал для работы на моем кластере?

squeue --noheader -o "%i %t" -t all -u username

Большое спасибо за вашу помощь! !!

1 Ответ

1 голос
/ 24 января 2020

Если Nextflow работает bash (оболочка, для которой вы пометили этот вопрос), не /bin/sh (что более распространено, поскольку это то, что вызывает вызов библиотеки system() во многих языках) , вы можете сделать это в любой оболочке:

# override *any* call to squeue with a very specific command that's known to work
squeue() {
  printf 'Ignoring old squeue arguments: ' >&2
  printf '%q ' "$@" >&2
  printf '\n' >&2
  command squeue --noheader -o '%i %t' -t all -u username
}
export -f squeue

Однако это, вероятно, не сработает: вполне вероятно, что Nextflow фактически вместо этого использует sh, поэтому вместо использования экспортируемой функции вы ' Я захочу создать каталог с исполняемым скриптом squeue, который затем вызывает команду real squeue. Таким образом:

#!/bin/bash
printf 'Ignoring old squeue arguments: ' >&2
printf '%q ' "$@" >&2
printf '\n' >&2

# FIXME: replace /usr/bin/squeue with the actual location of the real command 
exec /usr/bin/squeue --noheader -o '%i %t' -t all -u username
...