私はシステム上のディレクトリを便利に変更するのに理想的な簡単なスクリプトを書いています。実装のPythonで呼び出し元の現在の作業ディレクトリを変更する
詳細は重要ではなく、のが理想的に私は/usr/bin
でこのスクリプトを配置し、私は、システム上に行きたい引数を表すとそれを呼び出します言わせてはいけない:goto project1
私は期待しますスクリプトが終了したときに、私の端末の現在の作業はこれを実現するためには、プロジェクト1.
のものに変更されているであろうと、私が試した:
os.chdir('/')
subprocess.call('cd /', shell=True)
どちらも仕事のを。最初はPythonの作業ディレクトリを変更し、2番目のシェルはシェルを/
に生成します。
その後、私はどれほど素朴な私が存在しているかを理解しました。プログラムが実行されると、端末はプロセスをフォークするだけで、私のプログラムが書き込んでいるstdoutから読み込みます。それが何であれ、端末の状態には影響しません。
しかし、私は "何年も前からcd
を使用していましたが、確かに誰かがそのコードを書いていました"と思っていました。
ただし、cd
はcoreutilsでさえありません。代わりに、cd
のソースはこれです:だから
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"[email protected]"}
、質問のカップルが頭に浮かぶ:
- ユーザーが
cd
を呼び出したときに何が実際に舞台裏で起こっているの? (意味、端末とシステムが実際にやりとりする方法は?) - 端末の位置を変更するPythonスクリプトのようなものはありますか?
ありがとうございました!
「発信者の現在の作業ディレクトリを変更する」 - 私が知っている限り、それは単に不可能です。他のプロセスの作業ディレクトリに挑戦することはできません。 – user2357112
私はこれが答えだったかもしれないと考えました。 なぜbashはこれを許可しますか?これを行うために 'bash'で書かれたスクリプトを実行するなら、私は(明らかに)変更することができます。 –
それを試してみてください。 'echo 'cd /'> cd.sh; 。/ cd.sh'を実行すると、作業ディレクトリが変更されていないことがわかります。 – user2357112