성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] How Much Memory Do You Need in 2024...
[정성태] 특권을 조회하는 whoami 명령어 c:\temp> who...
[정성태] 커널 디버깅에서 특정 프로세스의 Token 정보 조회 //...
[정성태] What has case distinction but is ne...
[정성태] 대소문자 '변환'과 함께 따라오는 문제가 바로 대소문자 구분 없...
[정성태] Reverse-engineering what a "short" ...
[정성태] 윈도우의 경우, 스레드 관련 자원을 완전히 회수하기 위해 Thr...
[지현명] Android쪽에서 activity 접근 할때 아래꺼 적어 놓고...
[지현명] Maui.Android에서 폴더 관련 내용 정리 잘 되어 있네요...
[정성태] @정한솔 언급하신 사항이 맞습니다. (C# 13부터) 중간에 i...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>Linux - dotnet tool의 설치 디렉터리가 PATH 환경변수에 자동 등록이 되는 이유</h1> <p> 예전에는, "dotnet tool install ..."로 설치한 도구를 실행하고 싶다면 <a target='tab' href='https://www.sysnet.pe.kr/2/0/12077#path'>tools 디렉터리를 환경변수 PATH에 직접 등록</a>해야만 했습니다. 그런데, 근래 들어서는 이런 작업 없이 곧바로 실행이 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>dotnet tool install -g dotnet-dump</span> You can invoke the tool using the following command: dotnet-dump Tool 'dotnet-dump' (version '8.0.547301') was successfully installed. $ <span style='color: blue; font-weight: bold'>dotnet-dump ps</span> No supported .NET processes were found </pre> <br /> 위의 경우, dotnet-dump는 여전히 user-profile 디렉터리 밑에 설치되지만,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ echo $HOME /home/testusr $ <span style='color: blue; font-weight: bold'>which dotnet-dump</span> /home/testusr/.dotnet/tools/dotnet-dump </pre> <br /> 대신 저 디렉터리가 PATH에 등록돼 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>echo $PATH</span> /usr/local/sbin:...[생략]...:/snap/bin:<span style='color: blue; font-weight: bold'>/home/testusr/.dotnet/tools</span> </pre> <br /> 과연 저 PATH를 누가 등록한 것일까요? ^^ 아래의 글에서 <a target='tab' href='https://en.wikipedia.org/wiki/AUTOEXEC.BAT'>autoexec.bat</a> 역할을 하는 리눅스의 설정 파일을 알아봤는데요,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Windows 10 - bash 실행 시 시작 디렉터리 자동 변경 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11046'>https://www.sysnet.pe.kr/2/0/11046</a> </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > /etc/profile: 시스템 전역 설정 /etc/profile.d: 특정 프로그램에 대한 시스템 전역 설정 /etc/bashrc: Bash Shell 전용 설정 파일 ~/.bash_profile: 사용자 전용 설정 파일 ~/.bash_login: 사용자 로그인 시에만 실행되는 설정 파일 ~/.profile: 2개의 설정 파일(~/.bash_profile, ~/.bash_login)이 없는 경우에 적용되는 설정 파일 ~/.bashrc: 로그인이 없는 환경에서도 참조되는 사용자 설정 파일 </pre> <br /> 결국 찾아보면, /etc/profile.d 디렉터리에 등록된 dotnet.sh에 의해 경로가 추가되는 것을 확인할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>cat /etc/profile.d/dotnet.sh</span> # Add dotnet tools directory to PATH <span style='color: blue; font-weight: bold'>DOTNET_TOOLS_PATH="$HOME/.dotnet/tools"</span> case "$PATH" in *"$DOTNET_TOOLS_PATH"* ) true ;; <span style='color: blue; font-weight: bold'>* ) PATH="$PATH:$DOTNET_TOOLS_PATH" ;;</span> esac # Extract self-contained executables under HOME # to avoid multi-user issues from using the default '/var/tmp'. [ -z "$DOTNET_BUNDLE_EXTRACT_BASE_DIR" ] && export DOTNET_BUNDLE_EXTRACT_BASE_DIR="${XDG_CACHE_HOME:-"$HOME"/.cache}/dotnet_bundle_extract" </pre> <br /> 근래의 "apt install dotnet-sdk-8.0" 설치를 하면 그 시점에 dotnet.sh 파일도 함께 등록이 되는데요, 이게 sdk 버전마다 다른 듯합니다. 일례로, 제가 테스트한 다른 서버에서는 dotnet-cli-tools-bin-path.sh 파일이 있었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>cat /etc/profile.d/dotnet-cli-tools-bin-path.sh</span> export PATH="$PATH:$HOME/.dotnet/tools" </pre> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, /etc/profile.d 디렉터리 밑의 파일들은 스스로 실행되는 것은 아니고, /etc/profile 파일에 의해 실행되는 것입니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > $ <span style='color: blue; font-weight: bold'>cat /etc/profile</span> # /etc/profile: system-wide .profile file for the Bourne shell (sh(1)) # and Bourne compatible shells (bash(1), ksh(1), ash(1), ...). if [ "${PS1-}" ]; then if [ "${BASH-}" ] && [ "$BASH" != "/bin/sh" ]; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if [ -f /etc/bash.bashrc ]; then . /etc/bash.bashrc fi else if [ "$(id -u)" -eq 0 ]; then PS1='# ' else PS1='$ ' fi fi fi <span style='color: blue; font-weight: bold'>if [ -d /etc/profile.d ]; then for i in /etc/profile.d/*.sh; do if [ -r $i ]; then . $i fi done unset i fi</span> </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1895
(왼쪽의 숫자를 입력해야 합니다.)