Блок Linux отбрасывает обратный пакет, так как у него нет действительного обратного маршрута к сети VPN.
Предполагая, что ваш шлюз находится в 192.168.20.1
, добавление этого маршрута по умолчанию на вашем компьютере с Linux, скорее всего, решит вашу проблему:
ip route add default via 192.168.20.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%?}
, поэтому его удаление должно решить все ваши проблемы.