通过SSH运行源脚本名时退出脚本

时间:2010-04-20 03:14:35

标签: shell scripting ssh exit

我有一个脚本,其中有许多选项,其中一个选项集应该更改目录,然后退出脚本,然而在ssh上运行源代码,让它在父进程中更改它退出SSH是有的另一种方法,以便它不会退出?我的脚本位于/ usr / sbin目录中。

1 个答案:

答案 0 :(得分:0)

您可以尝试让脚本运行子shell而不是用于“更改父级中的[目录]”的任何方法(可能是您让孩子打印出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