.profile은 쉘 스크립트로 작성됩니다. Python 스크립트를 실행하고 싶다는 사실을 시스템에 알릴 수 있습니까?

.profile은 쉘 스크립트로 작성됩니다. 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 쉘과 엄격히 호환되지 않습니다.)

관련 정보