выход из скрипта при запуске исходного скрипта по SSH - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть сценарий с несколькими опциями. Предполагается, что один из наборов опций должен изменить каталог и затем выйти из скрипта. другой способ сделать это, чтобы он не выходил? Мой скрипт находится в каталоге / usr / sbin.

1 Ответ

0 голосов
/ 20 апреля 2010

Вы можете попробовать запустить скрипт в подоболочке вместо любого метода, который он использует для «изменения [каталога] в родительском объекте» (предположительно, у вас есть дочерний элемент, распечатавший команду cd, и родительский объект сделал что-то вроде eval "$(script --print-cd)"). Поэтому вместо (например) опции --print-cd добавьте параметр --subshell, который запускает новый экземпляр $SHELL.

d=/path/to/some/dir
#...
cd "$d"
#...
if test -n "$opt_print_cd"; then
    sq_d="$(printf %s "$d" | sed -e "s/'/'\\\\''/g")"
    printf "cd '%s'\n" "$sq_d"
elif test -n "$opt_subshell"; then
    exec "$SHELL"
fi

Если вы не можете редактировать сам скрипт, вы можете создать оболочку (при условии, что у вас есть разрешение на создание новых постоянных файлов на «сервере»):

#!/bin/sh
script='/path/to/script'
print_cd=
for a; do test "$a" = --print-cd && print_cd=yes && break; done
if test -n "$print_cd"; then 
    eval "$("$script" ${1+"$@"})" # use cd instead of eval if the script prints a bare dir path
    exec "$SHELL"
else
    exec $script" ${1+"$@"}
fi
...