<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>hong.log</title>
        <link>https://velog.io/</link>
        <description>진우</description>
        <lastBuildDate>Fri, 15 Apr 2022 12:55:16 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>hong.log</title>
            <url>https://velog.velcdn.com/images/jw_hong/profile/37a7d9e6-1b26-4820-9f70-ea44ae1a670e/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. hong.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/jw_hong" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[리눅스 환경변수 설정]]></title>
            <link>https://velog.io/@jw_hong/linuxenviromentsetting</link>
            <guid>https://velog.io/@jw_hong/linuxenviromentsetting</guid>
            <pubDate>Fri, 15 Apr 2022 12:55:16 GMT</pubDate>
            <description><![CDATA[<h1 id="linux-environmnet-setting">Linux Environmnet Setting</h1>
<p>도움된 링크 : <a href="https://www.leafcats.com/249">link</a></p>
<h2 id="1-내가-직면한-문제">1. 내가 직면한 문제</h2>
<blockquote>
</blockquote>
<ul>
<li><p>Python의 subprocess module을 사용해서 FreeSurfer (Linux-based program to preprocess T1-weighted image) 를 실행하려고 함</p>
<ul>
<li><p>FreeSurfer recon-all은 shell 환경에서 사용해야하고, 이를 위해서 설정해야할 환경변수가 있음</p>
</li>
<li><p>기존의 shell-based script에서 Python-based script로 전환을 하려고 했으나 불가능</p>
</li>
<li><p>그 이유는 <code>subprocess</code> 모듈은 child process를 열어서 커맨드를 수행한 뒤 닫기 때문에, parent process에 원하는 환경변수를 설정할 순 없었던 것</p>
</li>
</ul>
</li>
<li><p>이를 해결하기 위한 여러가지 해결책을 적용해봤으나, 잘 작동하지 않음</p>
</li>
</ul>
<h2 id="리눅스-환경설정-파일들">리눅스 환경설정 파일들</h2>
<ul>
<li><p><code>Alias : 별칭</code></p>
<ul>
<li>사용자가 명령어를 다른 이름으로 바꿔서 사용할 수 있는 쉘 내부 명령어</li>
<li>쉘 환경에서 쉽게 프로그램을 실행할 수 있게 해줌</li>
</ul>
</li>
<li><p><code>/etc/profile</code> : 시스템 전역 쉘 변수</p>
<ul>
<li>Login to shell (user) —&gt; first read <code>/etc/profile</code><ul>
<li>USER, LOGNAME, HOSTNAME in <code>/etc/profile</code></li>
<li>이러한 선언되어 있는 시스템 전역 쉘 변수들을 초기화</li>
<li>전역 리드라인 초기화 파일 (etc/inputrc) 읽음 —&gt; 기타 특수 프로그램들의 전역 환경 설정 파일 (<code>/etc/profile.d</code>) 읽음</li>
</ul>
</li>
</ul>
</li>
<li><p><code>/etc/bashrc</code> : 쉘 함수, Alias 시스템 전역 변수 정의</p>
<ul>
<li>각종 쉘 함수와 aliase를 위한 전역 변수들을 정의</li>
<li>e.g., python (alias)</li>
</ul>
</li>
<li><p><code>~/.bash_profile</code> : 유저 개인의 환경 설정</p>
<ul>
<li>시스템 전역에 적용 X</li>
<li><code>bash shell</code>을 사용하는 유저 개인 (지역변수) 의 path, 시작 프로그램 설정</li>
<li>항목은 <code>/etc/profile</code> 과 동일</li>
</ul>
</li>
<li><p><code>~/.bashrc</code> : 유저 개인의 alias 및 변수 설정</p>
<ul>
<li><code>/etc/bashrc</code> 파일에서 시스템 전역 변수를 읽은 뒤, 이 파일에서 유저의 개인적인 명령어 alias, 환경변수를 설정</li>
</ul>
</li>
<li><p><code>~/.bash_logout</code> : 로그아웃 설정파일</p>
</li>
</ul>
<h2 id="source-command"><code>source</code> command</h2>
<ul>
<li>수정된 새로운 환경 설정 내용을 적용하기 위해서 <code>source</code> command 사용</li>
<li>수정된 스크립트 파일 (bash, zsh, tcsh 등) 을 적용<ul>
<li>참고로, <code>bash</code> = <code>Bourne Again SHell</code> 의 줄임말</li>
</ul>
</li>
<li>Not an executable command, shell builtin (<a href="https://codegrepr.com/question/calling-the-source-command-from-subprocess-popen/">link</a>)</li>
<li>즉, shell에서 동작 가능한 커맨드<ul>
<li>To run a shell script changes the environment and to retain environment in the current shell<ul>
<li><strong>즉, 현재 실행되고 있는 쉘 환경 내에서의 환경을 업데이트하기 위한 커맨드!</strong></li>
</ul>
</li>
<li><code>source</code> is not an executable command, it’s a shell builtin.</li>
</ul>
</li>
</ul>
]]></description>
        </item>
    </channel>
</rss>