Skip to main content
 首页 » 编程设计

python之来自 python 的 bash 的 pwd 展开符号链接(symbolic link)

2025年05月04日13hnrainll

我有一个 shell,我使用 pwd 来显示我在哪个目录中。但是当我在目录中时,它是一个符号链接(symbolic link),它显示物理目录而不是符号链接(symbolic link)

import subprocess as sub 
 
def execv(command, path): 
    p = sub.Popen(['/bin/bash', '-c', command], 
                    stdout=sub.PIPE, stderr=sub.STDOUT, cwd=path) 
    return p.stdout.read()[:-1] 

如果我有文件夹 /home/foo/mime 当我调用时它是 /usr/share/mime 的符号链接(symbolic link)

execv('pwd', '/home/foo/mime') 

我有/usr/share/mime

我的 shell 代码如下所示:

    m = re.match(" *cd (.*)", form['command']) 
    if m: 
        path = m.group(1) 
        if path[0] != '/': 
            path = "%s/%s" % (form['path'], path) 
        if os.path.exists(path): 
            stdout.write(execv("pwd", path)) 
        else: 
            stdout.write("false") 
    else: 
        try: 
            stdout.write(execv(form['command'], form['path'])) 
        except OSError, e: 
            stdout.write(e.args[1]) 

我有 JavaScript 客户端

(可能以 JSON 形式返回命令结果和新路径会更好)。

有没有办法让 pwd 返回符号链接(symbolic link)的路径而不是物理目录。

请您参考如下方法:

只有当前 shell 知道它正在使用符号链接(symbolic link)访问当前目录。此信息通常不会传递给子进程,因此它们只能通过真实路径知道当前目录。

如果您希望子流程知道此信息,您需要定义一种传递它的方式,例如通过参数或环境变量。从 shell 中导出 PWD 可能会奏效。