Pythonのsubprocessモジュールを使ってaliasコマンドを実行したいです。
以下のコードを実行すると成功と出るのですが、実際にターミナルにalias
と打つと設定されていません。
違うシェルに対して実行しているかなとか思いましたがどうすればよいか分からない状況なので質問させていただきました。
よろしくお願いします
変更前
Python
1import subprocess 2result = subprocess.call('alias ll="ls-l"',shell=True) 3if result == 0: 4 print('成功') 5else: 6 print('失敗')
変更後
Python
1import os 2import subprocess 3target_file_path = os.path.abspath(__file__) 4cmd = 'alias test="' + target_file_path + '"' 5# cmd = 'ls ' + os.path.dirname(target_file_path) 6print(cmd) 7result = subprocess.call(cmd,shell=True) 8if result == 0: 9 print('成功') 10else: 11 print('失敗')
追記
もう少し実際のコードに寄せてみました。
デモコードとして関係のない部分は省いていますが、状況は同じです。
実行しているコマンドの文字列を出力し、手動で実行すると正常にエイリアスが登録できます。
また、変数cmdを下のコメントアウトしてあるlsに変えると実行できました。
再追記
汎用的にしたいの意味について
現在自分はzshのシェルを使っているので~/.zshrcに書き込めばよいと思いますが、例えばもしユーザーがのシェルがbashだったら機能しなくなってしまうので、zshでもbashでも動くようにしたいと思いまして。
bin配下にシンボリックリンク(エイリアスしたいのはとあるPythonファイルです)を貼るなどのアイディアもないことはなかったのですが、ファイルが増えてしまうのでエイリアスの方が綺麗だと思い、エイリアスをしたいと思っている次第であります。
環境
OS: macOS 10.15.4
ターミナル: zsh
Python: 3.7.6
回答2件
あなたの回答
tips
プレビュー