`~`(홈 디렉토리)와 같은 다른 단축키`~~`를 만듭니다. 수 있도록 다른 디렉토리를 가리키고

~~바로 가기로 사용할 수 있도록 다른 디렉토리를 가리키고 싶습니다 . 나는 그것이 정확히 같은 기능을 갖기를 원합니다 ~. 어떻게해야합니까?



답변

실제로, 방법이 있습니다. 좋은 방법은 아니지만 방법입니다. 하하!

/etc/passwd파일에 다음을 추가 하십시오.

~:x:1111:99:special Character user:/test:/sbin/nologin

교체 1111교체 의미가 무엇인가와 UID로 /test는 모방에 ~~ 원하는 디렉토리로.

99내 시스템에는 nobody내가 사용할 파일에 대한 권한이없는 그룹인지 확인하기 위해이 작업을 수행하는 것이 좋습니다. 이론적으로 /sbin/nologin쉘 과 같이 사용할 수 없으며, /etc/shadow항목이 없으므로 암호가 없습니다. 이론적으로는 문제가 없지만 계정으로 로그인 할 수 없도록하십시오.

참고로 : 나는 이것이 좋은 아이디어라고 말하지는 않지만 원하는 기능을 수행 할 것입니다.

편집 : 완전성 ‘을 위해서이 VarunAgw에 의해 제안되었다 : 당신은 정상으로 사용자를 추가 할 수 있습니다 useradd -s /sbin/nologin -N tmp후 수정 /etc/passwd/etc/shadow사용자 변경 tmp에를 ~와의 위치를 변경home directory


답변

CDPATH를 사용하고 문자 그대로 ~~ CDPATH 구성 요소 중 하나에 이름이 지정된 디렉토리를 넣을 수 있습니다 .

에서 man bash(하지만 CDPATH는에서 사용할 수 있습니다 sh)

cd 명령의 검색 경로입니다. 이것은 쉘이 cd 명령으로 지정된 대상 디렉토리를 찾는 콜론으로 구분 된 디렉토리 목록입니다. 샘플 값은 “. : ~ : / usr”입니다.

그렇게 할 수 있습니다 cd ~~.

vi ~~/someFile디렉토리 트리의 어느 곳에서나 같은 일을하고 싶다면 ~~쉘을 해킹하지 않는 한 문자 그대로 고집하면 운이 좋지 않습니다. 그러나 변수 또는 환경 변수를 사용하여 매직 디렉토리를 저장하여 할 수 있습니다 예를 들어$tilda/someFile

일반적으로 자주 액세스하는 파일을 홈 디렉토리의 짧은 이름의 디렉토리 안에 ~/b넣거나 or 와 같은 경로로 액세스 할 수 있습니다 ~/l.

당연히, 디렉토리를 원하는만큼 디렉토리에 대한 심볼릭 링크로 대체 할 수 있습니다.


답변

쉘의 ~틸드 확장은 대부분 프로그래밍이 가능합니다. 쉘 컨텍스트 의 값 또는 그 후행 컨텍스트에 선언 된 시스템 사용자 이름의 사용자 디렉토리 (이 라인을 따라 우수한 솔루션이 이미 제공되어 있음) 로 확장됩니다.$HOME

그래서:

(HOME=/tmp; cd ~)
pwd; echo "$HOME"

/tmp
/home/mikeserv

$HOME항상 변경 하고 재설정을 위해 쉘 환경 파일에 기능을 유지합니다.

home(){
    HOME=~$USER
    cd ~; pwd
}

~홈 디렉토리를 참조하지 않는 방식으로 물결표 를 사용하려면 그렇게 합니다. 그냥 재 할당하십시오 $HOME. 두려워하지 마십시오. $HOME다른 것과 마찬가지로 쉘 변수입니다.


내가 가지고있는 또 다른 제안은 @PSkocik의 훌륭한 조언에 대한 약간의 확장입니다 $CDPATH. 그러나 언급하지 않은 한 가지는 $CDPATH현재 쉘 값을 전혀 변경하지 않고 인라인을 사용하고 변경할 수 있다는 것 $CDPATH입니다. 예를 들면 다음과 같습니다.

mkdir -p /tmp/1/2
CDPATH=/tmp cd 1/2

/tmp/1/2

cd반드시 쉘 내장이지만 POSIX 특수 쉘 내장 $CDPATH은 아니므로 값을 선언 해도 현재 쉘 값에 영향을 미치지 않습니다. 위와 같이 사용하면 $CDPATH값이 하나의 cd명령 환경에서만 변경되고 나중에 이전 값으로 복원됩니다. 나는 위의 기술을 히스토리 완료와 함께 사용할 때 가장 유용하다고 생각합니다. 위의 작업을 수행하고 디렉토리로 변경하고 몇 가지 명령을 실행 한 다음 명령으로 돌아올 때까지 위로 누르고 cd경로 세그먼트 또는 백 스페이스로 이동하여 다른 곳으로 이동하십시오.


이제이 두 개념을 결합하면 다음에 사용할 때 이전에 사용한 명령이 완전히 다른 것을 의미하게 할 수 있습니다.

for HOME in /tmp ~
do  mkdir -p ~/1/2
    CDPATH=~ cd 1/2
done

/tmp/1/2
/home/mikeserv/1/2

답변

bash 함수로 완벽하게 작동합니다.

$ function ~~ { cd /tmp; }
$ pwd
/home/jackman
$ ~~
$ pwd
/tmp
$ cd -
$ pwd
/home/jackman

조금 더 가까이 오는 또 다른 접근법이 있습니다 (요구 사항에 가깝지 않다는 것을 알고 있습니다)

function ~~ { echo /test; }

그런 다음 몇 문자 더 :

cd `~~`/subdir
vi `~~`/file