それは不可能です。
スクリプトは、コマンドが発行された親シェルによって生成されたサブシェルで実行されます。
任意の cd
サブシェルで行っても、親シェルには影響しません。
親の作業ディレクトリを子から変更することはできないと指摘する人もいます。
しかし、目的を達成する方法があります。シェル関数から 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'))
次に、次のことができます:
[email protected]:/home/$> go tdi [email protected]:/home/tdi$> go tdi
cd
外部プログラムは親シェルの CWD を変更できないため、排他的に (?) シェル内部コマンドとして実装されます。
codaddict が書いているように、サブシェルで何が起こっても、親シェルには影響しません。ただし、別のディレクトリにあるシェルをユーザーに提示することが目的の場合は、いつでも Python に os.chdir
を使用させることができます。 サブシェルの作業ディレクトリを変更し、新しい Python からのシェル。これにより、元のシェルの作業ディレクトリは変更されませんが、ユーザーは別のディレクトリに残ります。