0

さて、私はpython3スクリプトを使用してMAC OS Xでエイリアスを管理しようとしています。最初に、すべてのエイリアスコマンドを1つのファイルに入れ、以下のコードを使用してこれらのエイリアスをオン/オフしようとしました:

def enable_alias(self):
    alias_controller = AliasListControl() # just a simple class to handle the single file path and other unimportant things.
    os.popen('cp ~/.bash_aliases ~/.bash_aliases.bak')
    os.popen('cat ' + alias_controller.path + '>> ~/.bash_aliases')
    os.system('source ~/.bash_aliases')

def disable_alias(self):
    os.popen('mv ~/.bash_aliases.bak ~/.bash_aliases')
    os.popen('source ~/.bash_aliases')# maybe I should call some other unalias commands there 

ご覧のとおり、問題があります。スクリプトが実行されるとos.system('source ~/.bash_aliases')、最初にサブシェルを開いてコマンドを実行するため、ソース操作は親シェルではなくサブシェルでのみ有効になり、コマンドが終了してサブシェルが閉じられます。これは、os.system('source ~/.bash_aliases')行ったことは単なる無駄であることを意味します。

4

2 に答える 2

0

私は OS/X には詳しくありませんが、bash には精通しているので、これを試してみます。

まず、Python の shutil モジュールおよび/または subprocess モジュールを調べます。os.system と os.popen は、これらのことを行う最良の方法ではなくなりました。

次に、すぐに消えてしまうサブシェルからスクリプトを取得しないでください。代わりに、次のようなものを追加します。

source ~/.bash_aliases

~/.bashrc で、新しい bash が開始されるたびに使用されるようにします。

于 2013-11-13T04:00:51.903 に答える