从子进程更改父进程的目录

时间:2015-03-11 20:52:20

标签: python linux macos bash

我创建了一个很酷的python程序,可以帮助人们以交互方式导航到其他目录。当他们到达那里我想让他们点击Enter并退出程序,将他们留在选定的目录中。但是,你总是在b / c中开始的同一个目录中只有python运行的子进程实际更改了目录和父进程'目录保持不变。

1 个答案:

答案 0 :(得分:2)

不是直接运行程序,而是提供包装脚本。您的程序完成后,向包装器脚本发出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

如您所见,这定义了一个临时文件,并使用mc选项将该文件名传递给-P。在退出mc之前,它会将所选目录写入该临时文件。此脚本将该临时文件和cd读取到所选目录。

为了方便运行这个包装器脚本,可以创建一个shell别名:

alias mc=". /usr/lib/mc/bin/mc-wrapper.sh"'

稍作修改,我希望您可以使用您的程序。