我有一个 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 可能会奏效。
