オプションセットの1つがディレクトリを変更してからスクリプトを終了するはずのスクリプトがありますが、ソースでsshを実行して、親で変更するようにしますSSHを終了する別の方法があります終了しないようにこれを行いますか?私のスクリプトは /usr/sbin ディレクトリにあります。
1 に答える
0
「親の[ディレクトリ]を変更する」ために使用する方法の代わりに、スクリプトにサブシェルを実行させることを試みることができます(おそらく、子に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 に答える