쉘 스크립트에서 현재 사용자의 기본 쉘을 알아낼 수 있는 방법이 있는지 궁금합니다.
사용 사례: 명령에 대한 별칭을 설정하는 스크립트를 작성 중이며 별칭은 쉘 스크립트에 설정되어 있습니다.
!# /bin/bash
alias = 'some command to set the alias'
스크립트를 실행하는 사용자의 기본 셸을 찾고 해당 ~/.bashrc 또는 ~/.zshrc 파일에 이 별칭을 추가하는 논리가 스크립트에 있습니다.
하지만 스크립트 앞에 shebang을 추가하고 명시적으로 bash를 사용하도록 요청하면 답변이 게시되었습니다.여기ZSH 터미널에서 이 스크립트를 실행하더라도 항상 예상대로 bash가 반환됩니다.
shebang 설정에 관계없이 스크립트를 실행하는 쉘 유형을 얻는 방법이 있습니까?
저는 Mac과 모든 Linux 기반 비스트로에서 작동하는 솔루션을 찾고 있습니다.
답변1
환경 변수는 SHELL
항상 기본 로그인 셸로 확장됩니다.사용자에게 전화(에서 값을 얻습니다 /etc/passwd
).
다른 특정 사용자의 경우 를 사용하여 일부 처리를 수행해야 합니다 /etc/passwd
. 다음은 간단한 awk
스니펫입니다.
awk -F: -v user="foobar" '$1 == user {print $NF}' /etc/passwd
foobar
실제 사용자 이름으로 바꿉니다 .
ldap
하나 (또는 유사한 것) 가 있는 경우 getent
직접 구문 분석하는 대신 데이터베이스 가져오기를 사용하십시오 /etc/passwd
.
getent passwd | awk -F: -v user="foobar" '$1 == user {print $NF}'
아니면 가장 깔끔한 방법으로 구문 분석해 보겠습니다 getent
(@Kusalananda에게 감사드립니다).
getent passwd foobar | awk -F: '{print $NF}'
답변2
$ finger $USER|grep -oP 'Shell: \K.*'
/bin/mksh
답변3
이는 MacOS의 표준 명령이 아니기 때문에 낮은 수준의 호출을 사용하여 컴퓨터에 구성된 이름 지정 서비스를 쿼리 getent
할 수 있습니다 . 이를 위해서는 대부분의 Unix 계열 플랫폼에서 일반적으로 발생하는 또는 getpwuid
호출이 필요할 수 있습니다 .perl
python
예를 들어, 현재 사용자의 쉘이 반환됩니다.
perl -e '@x=getpwuid($<); print $x[8]'
답변4
다음과 같이 환경에서 사용자의 기본 셸을 가져올 수 있습니다.
echo $SHELL
하지만 이렇지는 않습니다:
echo $0
후자는 스크립트가 현재 어떤 쉘을 사용하고 있는지 알려줄 뿐입니다. 따라서 위의 첫 번째 옵션이 필요합니다.