GNU/Linux >> Linux の 問題 >  >> Linux

Pythonスクリプトを使用してシェルの作業ディレクトリを変更する

それは不可能です。

スクリプトは、コマンドが発行された親シェルによって生成されたサブシェルで実行されます。

任意の 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 からのシェル。これにより、元のシェルの作業ディレクトリは変更されませんが、ユーザーは別のディレクトリに残ります。


Linux
  1. Pythonスクリプトを使用したScientificLinux7.1のベクトル代数:パート1

  2. シェルスクリプトはどこから実行されますか?

  3. 混合シェルと python スクリプトは可能ですか?

  1. Ctrl-C で Python スクリプトを強制終了できません

  2. 変数でディレクトリを変更するシェルスクリプト

  3. &を使用してバックグラウンドで実行すると、Python スクリプトの Nohup が機能しない

  1. どのシェルインタープリターがシバンなしでスクリプトを実行しますか?

  2. スペースを含むファイル名をシェルスクリプトに渡しますか?

  3. Pythonスクリプトからシェルスクリプトへの戻り値