Мне нужно запустить эту команду

trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap

для всех подкаталогов, следующих по шаблону именования us_0.0, us_-0.2, us_-0.4 ... us_-3.8 . Команда также попросит меня сделать выбор после запуска, и ответ также будет 0. Как именно я должен написать это в bash?

1 ответ1

1

Если вы имеете в виду, вам нужно передать каждый каталог в стандартный ввод:

convAll ()
{
  while read line
  do
    echo -e "$line\n0" | trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap
  done
}

ls | grep -E 'us_-?[0-9]\.[0-9]+' | convAll
# NOTE: There's probably an even shorter one-liner version of this that uses `xargs`, but
#       I'll leave that as an exercise to the reader.

Если вы имеете в виду, вам нужно передать каждый каталог в качестве дополнительного аргумента:

ls | grep -E 'us_-?[0-9]\.[0-9]+' | tr '\n' '\0' | \
     xargs -0 -n 1 trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap

Если вы имеете в виду что вам нужно cd - диск в каждой директории:

convAll ()
{
  while read line
  do
    (\
       cd "$line" && \
       trjconv -s run.tpr -f run.xtc -pbc mol -ur compact -o unwrap || \
       echo "Command failed for '$line'." >&2 \
    )
  done
}

ls | grep -E 'us_-?[0-9]\.[0-9]+' | convAll

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .