使用python脚本在shell中更改工作目录

Dar*_*rek 12 python linux bash shell

我想实现一个userland命令,它将获取其一个参数(路径)并将目录更改为该目录.程序完成后,我希望shell在该目录中.所以我想实现cd命令,但是使用外部程序.

它可以在python脚本中完成,还是我必须编写bash包装器?

例:

tdi@bayes:/home/$>python cd.py tdi
tdi@bayes:/home/tdi$>
Run Code Online (Sandbox Code Playgroud)

bst*_*rre 15

其他人指出,您无法从子级更改父级的工作目录.

但有一种方法可以实现你的目标 - 如果你从shell函数cd,它可以改变工作目录.将其添加到〜/ .bashrc中:

function go()
{
    cd $(python /path/to/cd.py "$1")
}
Run Code Online (Sandbox Code Playgroud)

您的脚本应该打印要更改为的目录的路径.例如,这可能是你的cd.py:

#!/usr/bin/python
import sys
if sys.argv[1] == 'tdi': print '~/long/tedious/path/to/tdi'
elif sys.argv[1] == 'xyz':  print '~/long/tedious/path/to/xyz'
Run Code Online (Sandbox Code Playgroud)

然后你可以这样做:

tdi@bayes:/home/$> go tdi
tdi@bayes:/home/tdi$> go tdi


cod*_*ict 5

那是不可能的。

您的脚本在由发出命令的父 shell 生成的子 shell 中运行。

cd在子 shell 中完成的任何操作都不会影响父 shell。