【发布时间】:2015-03-12 05:07:12
【问题描述】:
我创建了一个很酷的 python 程序,它可以帮助人们以交互方式导航到其他目录。当他们到达那里时,我想让他们按 Enter 并退出程序,将它们留在选定的目录中。但是,您总是在 b/c 中启动的同一个目录中结束,只有运行 python 的子进程实际上更改了目录,而父进程的目录保持不变。
【问题讨论】:
我创建了一个很酷的 python 程序,它可以帮助人们以交互方式导航到其他目录。当他们到达那里时,我想让他们按 Enter 并退出程序,将它们留在选定的目录中。但是,您总是在 b/c 中启动的同一个目录中结束,只有运行 python 的子进程实际上更改了目录,而父进程的目录保持不变。
【问题讨论】:
获取一个包装脚本,而不是直接运行您的程序。您的程序完成后,会向包装脚本发出信号,通知cd 到哪个目录。源包装脚本执行cd。
另一个文件浏览实用程序 Midnight Commander (mc) 已经解决了同样的问题。这是它的包装脚本:
MC_USER=`id | sed 's/[^(]*(//;s/).*//'`
MC_PWD_FILE="${TMPDIR-/tmp}/mc-$MC_USER/mc.pwd.$$"
/usr/bin/mc -P "$MC_PWD_FILE" "$@"
if test -r "$MC_PWD_FILE"; then
MC_PWD="`cat "$MC_PWD_FILE"`"
if test -n "$MC_PWD" && test -d "$MC_PWD"; then
cd "$MC_PWD"
fi
unset MC_PWD
fi
rm -f "$MC_PWD_FILE"
unset MC_PWD_FILE
如您所见,这定义了一个临时文件,并使用-P 选项将该文件名传递给mc。在mc 退出之前,它将所选目录写入该临时文件。此脚本会将该临时文件和 cd 读取到所选目录。
为了方便运行这个包装脚本,我们创建了一个 shell 别名:
alias mc=". /usr/lib/mc/bin/mc-wrapper.sh"'
稍作修改,我希望您可以使用您的程序进行这项工作。
【讨论】: