홈 디렉터리와 같이 전역적으로 액세스할 수 있는 사용자 지정 디렉터리를 만듭니다.

홈 디렉터리와 같이 전역적으로 액세스할 수 있는 사용자 지정 디렉터리를 만듭니다.

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)을 사용하여 이 가상의 사용자 프로젝트에 대한 로그인을 비활성화할 수도 있습니다. 사용자의 프로젝트에 로그인할 수 없는 경우 홈 디렉토리를 생성할 때 배치한 모든 항목이 필요하지 않으므로 모두 삭제하세요. 물론 이 모든 작업은 루트로 수행되어야 합니다.adduserchown you:yourgroup ~projects/passwd -l projects

관련 정보