вызов bash создает новый процесс.Я хочу перейти к следующей команде в том же процессе

#bash

#bash

Вопрос:

Я вхожу на удаленный сервер с помощью SSH-клиента. Я написал скрипт, который будет выполнять две команды на сервере.Но, поскольку первая команда выполняет скрипт bash, который в конце вызывает команду «bash». Это приводит к выполнению только одной команды, а не другой.

Я не могу отредактировать первый скрипт, чтобы прокомментировать или удалить вызов bash.

я написал следующий сценарий:

abc.sh

 #!/bin/bash
command1="sudo -u user_abc -H /abc/xyz/start_shell.sh"
command2=".try1.sh"
$command1 amp;amp; $command2
 

Выполняется только команда 1, а не вторая, поскольку вызов «bash» создает новый процесс, вторая команда не выполняется.

Комментарии:

1. Это выполняется $command1 первым и после его возврата $command2 выполняется только в случае $command1 успешного возврата (код возврата 0 ). Если это не то, что вам нужно, объясните более подробно, чего вы действительно хотите.

Ответ №1:

Решение 1

Поскольку вы можете выполнить start_shell.sh , у вас должны быть права на чтение. Поэтому вы можете скопировать скрипт, изменить его так, чтобы он больше не вызывал bash, и выполнить измененную версию.

Я думаю, это было бы лучшим решением. Если вам действительно действительно нужно использовать start_shell.sh как есть, вы можете попробовать одно из следующих решений.

Решение 2

Попробуйте закрыть stdin с помощью <amp;- . Интерактивный сеанс bash завершится немедленно, если нет стандартного ввода.

 sudo -u user_abc -H /abc/xyz/start_shell.sh <amp;-; ./try1.sh
 

Решение 3

Измените порядок, если обе команды независимы.

 ./try1.sh; sudo -u user_abc -H /abc/xyz/start_shell.sh