.profileはシェルスクリプトで書かれています。 Pythonスクリプトを実行したいという事実をシステムに通知できますか?

.profileはシェルスクリプトで書かれています。 Pythonスクリプトを実行したいという事実をシステムに通知できますか?

私はPythonを得ました。シェルスクリプトを取得できませんでした。シェルスクリプトを学ぶことができますが、代わりにPythonを使用できる場合は、そうしたくありません。

私にとって良い出発点はスクリプトです.profile。現在私には次のようになります。

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/profile; for setting the umask
# for ssh logins, install and configure the libpam-umask package.
#umask 022

# if running bash
if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
    fi
fi

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

# added by Anaconda2 2.4.0 installer
export PATH="/home/alien/anaconda2/bin:$PATH"

# ===== Added manually.

# texlive
export PATH="/home/alien/texlive/2015/bin/x86_64-linux:$PATH"
export INFOPATH="/home/alien/texlive/2015/texmf-dist/doc/info:$INFOPATH"
export MANPATH="/home/alien/texlive/2015/texmf-dist/doc/man:$MANPATH"

# petsc
export PETSC_DIR="/home/alien/petsc"


# PYTHONPATH
export PYTHONPATH="/home/alien/cncell:$PYTHONPATH"
export PYTHONPATH="/home/alien/csound:$PYTHONPATH"

代わりに、次のような文章を書きたいです。

import os
import subprocess

#  if running bash
HOME = os.environ["HOME"]
if os.environ["BASH_VERSION"]: #not sure how to complete this line 
    bashrc_path = os.path.join(HOME, ".bashrc")
    if os.isfile(bashrc_path):
        subprocess.call([bashrc_path])

user_bin_dir = os.path.join(HOME, "bin")
if os.isdir(user_bin_dir):
    os.environ["PATH"] += ":" + user_bin_dir

user_added_vars = [("PATH", "/home/alien/anaconda2/bin"),\
                   ("PATH", "/home/alien/texlive/2015/bin/x86_64-linux"),\
                   ("INFOPATH",  "/home/alien/texlive/2015/texmf-dist/doc/info"),\
                   ("MANPATH", "/home/alien/texlive/2015/texmf-dist/doc/man")]

for var_name, addition in user_added_vars:
    os.environ[var_name] += ":" + addition

これは私にとってもっと読みやすく、おなじみです。

bashスクリプトを必要とするPythonスクリプトを何とか書くことはできますか?以前の質問への回答が役に立つと思いました。#!/usr/bin/env pythonたぶん、スクリプトの上に「Python Script」と指定する必要がありますか?しかし、#!/bin/bash現在の一番上に行がないのはなぜですか.profile

ベストアンサー1

まさか。.profile(および.bashrc.bash_logout.bash_profileシェルによって異なります。つまり、シェルプログラムとシェルプログラムだけがこれらのファイルを読み込みます。それ(シェル)はこれらを別々のプロセスとして実行しませんが、源泉彼らのアプローチはPythonのアプローチと似ています。輸入だが、優雅さとは距離が遠い。同様のことが必要な場合は、Pythonベースのシェルを見つける必要があります。この関連質問に対する回答が見つかりました。ここ

最も手に入るのは、操作を実行してからシェル互換のペアをKEY=VALUEエクスポートし、それを標準出力として印刷してから、次の.profileようなものを含むPythonスクリプトです。

set -a
eval `python $HOME/.profile.py`
set +a

しかし、知っておくべきことがいくつかあります。まず、VALUEこれらすべてを正しく参照する必要があります。通常、VALUEに一重引用符が含まれていない場合は、一重引用符が必要です。第二に、一部のシェル変数はオーバーライドしてはいけません(何をしているのかわからない限り)。最初に浮かぶ変数はSECONDS、RANDOMです。

注:このset機能は自動エクスポート機能のオンとオフを切り替えるため、Pythonからシェルに送信されるすべての変数はシェルからサブプロセスにエクスポートされます。 Pythonスクリプトの各KEYの前に用語がある場合は、これを行う必要はありませんexport。 (しかし、これは元のBourneシェルと厳密に互換性がありません。)

おすすめ記事