【问题标题】:Change directory of a parent process from a child process从子进程更改父进程的目录
【发布时间】:2015-03-12 05:07:12
【问题描述】:

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

【问题讨论】:

    标签: python linux macos bash


    【解决方案1】:

    获取一个包装脚本,而不是直接运行您的程序。您的程序完成后,会向包装脚本发出信号,通知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"'
    

    稍作修改,我希望您可以使用您的程序进行这项工作。

    【讨论】:

      猜你喜欢
      • 2014-02-19
      • 1970-01-01
      • 1970-01-01
      • 2011-04-20
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多