Это потому, что exec.sh является локальным и выполняет команду на удаленной машине. Итак, если вы убьете локальный процесс, удаленный процесс все равно будет работать.
Чтобы достичь того, что вы хотите, вам нужно, чтобы exec.sh ловил СИГНАЛ нажатия CTRL+C и перед самоуничтожением уничтожал команду на удаленном хосте.
function trap_ctrlc ()
{
# kill the remote process
ssh user@pass "pkill -9 python"
exit 2
}
# initialise trap to call trap_ctrlc function
# when signal 2 (SIGINT) is received
trap "trap_ctrlc" 2
your script here
Осторожно :python — очень общий процесс для уничтожения. ID процесса лучше сохранять при запуске, а потом специально убивать по ID
Предположим, что ваша rename
утилита является утилитой Perl rename
(, которая принимает выражение Perl, обычно выражение подстановки, в качестве первого аргумента):
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file1_S1_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file2_S2_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file3_S95_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file4_S143_R1
$ rename 's/_S\d*_/_/g' *
$ ls -l
total 0
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file1_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file2_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file3_R1
-rw-r--r-- 1 kk wheel 0 Oct 4 11:00 file4_R1
Вы неправильно поняли регулярное выражение, возможно, предположив, что будете использовать шаблон подстановки имени файла, а не регулярное выражение Perl. Я исправил это, изменивS*
(соответствует нулю или более S
символов )наS\d*
(соответствует S
, за которым следует ноль или более цифр ).