나는 파이썬을 얻었다. 쉘 스크립트를 얻지 못했습니다. 쉘 스크립팅을 배울 수 있지만 대신 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 쉘과 엄격히 호환되지 않습니다.)