0

我有一个脚本,其中包含许多选项,其中一个选项集应该更改目录,然后退出脚本,但是通过 ssh 与源代码运行以使其在退出的父级中更改 SSH 是否有另一种方法这样做是为了不退出?我的脚本在 /usr/sbin 目录中。

4

1 回答 1

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
于 2010-04-20T04:04:38.997 回答