projects
내 홈 디렉터리( ) 등 어디서나 접근할 수 있는 디렉터리를 만들고 싶습니다 ~
. 예를 들어, 다음은 작동해야 합니다(cwd가 무엇이든 관계 없음).
cd projects
ls projects/project1
어떻게 할 수 있는지에 대한 아이디어가 있습니까?
답변1
dash
, bash
또는 ksh
(그리고 아마도 다른 쉘 - 이 기능을 구현한 쉘이 모두 기억나지 않음)을 사용하는 경우 이 CDPATH
변수를 설정할 수 있습니다. 에서 man bash
:
CDPATH
명령에 대한 검색 경로입니다cd
. 이는 쉘이 cd 명령으로 지정된 대상 디렉토리를 찾는 콜론으로 구분된 디렉토리 목록입니다. 샘플 값은 입니다.:~:/usr
.
그런데 샘플 값은 현재 디렉터리인 ~(홈 디렉터리)를 검색한 다음 /usr
정확한 순서로 검색합니다. 즉, 구분된 목록의 첫 번째 항목이므로 .
및 :
보다 ~
우선 합니다 /usr
.
답변2
cd
특별한 소스 작업을 수행 하는 래퍼 함수를 만들 수 있습니다 .
cd(){
case "$1" in
(projects|projects/*)
local dir="$1"
command cd "/some/dir/${dir}" ;;
(*)
command cd "$@" ;;
esac
}
일부 일반화를 통해 여러 특수 경로를 처리하도록 확장할 수 있으며, 추가 개선을 통해 특수 경로가 대상의 일부를 구성할 필요조차 없습니다.
재치 있게:
cd(){
local dir=''
local input="${1}/" # force on / to make matches and substitutions easier
case "${input}" in
(projects/*) dir="/some/dir/$input" ;;
# prj is a nick name for "projects"
(prj/*) dir="/some/dir/projects/${input#*/}" ;;
(foobar/*) dir="/another/place/$input" ;;
# : is a nickname for foobar
(:/*) dir="/another/place/foobar/${input#*/}" ;;
(*)
command cd "$@"
return
;;
esac
command cd "${dir}"
}
이를 통해 OP에서 언급한 동작에서 영감을 받아 대상 디렉터리의 별명을 지정할 수 있습니다 ~
.
답변3
물결표 연산자는 홈 디렉토리보다 약간 더 복잡합니다. 바라보다:https://datacadamia.com/lang/bash/tilde_expansion
이제 모든 사용자에게 적용되는 변수나 함수(예: PATH)를 생성하려면 /etc/profile.d의 bash 스크립트를 사용하여 시스템에 추가하세요.
예를 들어 /etc/profile.d/00-custom-vars.sh 파일을 가질 수 있습니다.
export PROJECT="/var/www/somesite"
예를 들어, cd $PROJECT/html을 사용하여 셸에서 이를 참조할 수 있습니다.
그러나 일반 폴더처럼 보이게 만들고 싶다면 bash의 별칭과 함수를 교묘하게 사용하여 cd 명령에 대한 shim을 작성하면 됩니다.
답변4
~
홈 디렉토리의 확장자는 사용자 관리와 관련이 있습니다. 그러나 물결표 확장은 더 많은 일을 할 수 있습니다. 라는 파일이 있다면프로젝트, 물결표는 ~projects
해당 사용자의 홈 디렉토리로 확장됩니다 /home/projects/
.
결론적으로:내가 이것을 추천한다고 말하지 마십시오. 하지만 시스템을 남용해도 괜찮다면 다음과 같은 명령을 추가할 수 있습니다.프로젝트(배포판에 GUI가 없으면 useradd
및 같은 명령이 도움이 될 것입니다.) 프로젝트의 홈 디렉터리에 대한 전체 액세스 권한을 부여하거나 자신을 소유자로 만들 수도 있습니다. (잠금의 경우 -l)을 사용하여 이 가상의 사용자 프로젝트에 대한 로그인을 비활성화할 수도 있습니다. 사용자의 프로젝트에 로그인할 수 없는 경우 홈 디렉토리를 생성할 때 배치한 모든 항목이 필요하지 않으므로 모두 삭제하세요. 물론 이 모든 작업은 루트로 수행되어야 합니다.adduser
chown you:yourgroup ~projects/
passwd -l projects