Простая команда cp не работает (внутри сценария оболочки и отправляется с использованием sbatch в кластере)

Блок Linux отбрасывает обратный пакет, так как у него нет действительного обратного маршрута к сети VPN.

Предполагая, что ваш шлюз находится в 192.168.20.1, добавление этого маршрута по умолчанию на вашем компьютере с Linux, скорее всего, решит вашу проблему:

ip route add default via 192.168.20.1
2
14.09.2020, 11:21
1 ответ

Конструкция ${d%?}не работает в оболочках POSIX, таких как sh. В зависимости от вашей ОС ваш shбудет либо простой оболочкой POSIX, например dash(, например. в Debian или Ubuntu )или, возможно, bash, работающем в режиме POSIX. В любом случае ${d%?}не будет понято, и это, вероятно, нарушает ваш сценарий.

Простым решением было бы использовать #!/bin/bashдля его запуска. Однако ваш сценарий также кажется излишне сложным. Во-первых, ${d%?}просто удаляет косую черту из имени каталога, но в этом нет никакой пользы :

.
$ d="bar/"
$ cd $d
$ pwd
/home/terdon/foo/bar

Наличие одной (или нескольких косых черт )в конце имени каталога допустимо. С таким же успехом вы можете использовать cd barкак cd bar/или cd bar//////////.

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

#!/bin/bash
for d in lambda.*/
do

  mv Transfer/"$d"/ENMIN/  "$d"
  echo "Transferred"
  ( ## open a subshell so the cd only hapens in the subshell
    ## and doesn't affect the script
    cd "$d"/ENMIN/ && 
      time mpirun -np $SLURM_NTASKS gmx_mpi mdrun -v -stepout 1000 -s enmin.tpr -deffnm enmin
  )
  echo "Energy minimization done of $d cycle"
  echo "Copying to OutboundTransfer"
  mkdir Transfer/"$d"
  cp -r "$d"/ENMIN Transfer/"$d"
  echo "Copied"
done

Я не знаю, как работает sbatch, но из того, что вы описываете, похоже, что он запускает скрипт с sh, игнорируя шебанг. Вы также можете попробовать sbatch bash MyScript.shили просто попробовать мою версию выше, которая должна быть переносима на любую оболочку в стиле sh -. В любом случае, единственным башизмом, который у вас был, был ${d%?}, поэтому его удаление должно решить все ваши проблемы.

4
18.03.2021, 23:04

Теги

Похожие вопросы