我想实现一个userland命令,该命令将使用其参数之一(路径)并将目录更改为该目录。程序完成后,我希望 shell 位于该目录中。所以我想用外部程序来实现cd命令。

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

例:

tdi@bayes:/home/$>python cd.py tdi
tdi@bayes:/home/tdi$>

最佳答案

其他人指出,您不能从 child 那里更改 parent 的工作目录。
但是有一种方法可以实现您的目标-如果从shell函数进行cd,则可以更改工作目录。将此添加到您的〜/.bashrc中:

go() {
    cd "$(python /path/to/cd.py "$1")"
}
您的脚本应将路径打印到您要更改的目录。例如,这可能是您的cd.py:
#!/usr/bin/python
import sys, os.path
if sys.argv[1] == 'tdi': print(os.path.expanduser('~/long/tedious/path/to/tdi'))
elif sys.argv[1] == 'xyz':  print(os.path.expanduser('~/long/tedious/path/to/xyz'))
然后,您可以执行以下操作:
tdi @ bayes:/home/$> go tdi
tdi @ bayes:/home/tdi $> go tdi

10-07 20:23