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