"~"(홈 디렉토리)와 같은 또 다른 바로가기 "~~"를 만듭니다.

"~"(홈 디렉토리)와 같은 또 다른 바로가기 "~~"를 만듭니다.

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

답변1

사실 아주 좋은 방법은 아니지만 방법은 있어요. 하하!

파일 에 다음을 추가합니다 /etc/passwd.

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

UID를 1111의미 있는 것으로 바꾸십시오. /test에뮬레이트하려는 디렉토리 로 바꾸십시오 ~~.

99nobody내 시스템에서는 그룹 입니다 . 그룹인지 확인하려면 이렇게 하는 것이 좋습니다.아니요사용될 모든 파일에 대한 권한. 이론상으로는 /sbin/nologin쉘로 사용할 수 없고 항목도 없어 /etc/shadow비밀번호도 없습니다. 이론적으로는 문제가 없지만 해당 계정으로 로그인할 수 없도록 해야 합니다.

참고 사항: 이것이 좋은 생각이라고 말하는 것은 아니지만 원하는 대로 작동할 것입니다.

편집: 완전성을 위해 @VarunAgw가 제안한 내용은 다음과 같습니다.

정상적으로 사용자를 추가한 useradd -s /sbin/nologin -N tmp다음 사용자를 수정 /etc/passwd및 변경 /etc/shadow하고 홈 디렉터리의 위치를 ​​변경할 수 있습니다.tmp~

답변2

CDPATH를 활용하고 ~~ 문자 그대로 이름이 지정된 디렉터리를 CDPATH 구성 요소 중 하나에 배치할 수 있습니다.

from man bash(그러나 CDPATH는 에서도 사용 가능 sh)

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

그러면 당신도 그렇게 할 수 있을 것이다 cd ~~.

디렉토리 트리의 어디에서나 이와 같은 작업을 수행 하려는 경우 쉘을 해킹하지 않는 한 vi ~~/someFile문자 그대로의 의미를 고수하면 운이 좋지 않습니다. ~~그러나 변수나 환경 변수를 사용하여 매직 디렉토리를 저장할 수 있습니다. 예를 들어 다음과 같이 할 수 있습니다.$tilda/someFile

~/b나는 일반적 으로 자주 액세스하는 파일을 홈 디렉토리의 간략한 이름의 디렉토리에 배치하여 ~/l.

물론, 원하는 경우 일반적으로 디렉토리를 디렉토리에 대한 심볼릭 링크로 바꿀 수 있습니다.

답변3

껍질의 ~물결선 확장은 다음과 같습니다.최대프로그래밍 가능. 후행 컨텍스트에 선언된 시스템 사용자 이름의 사용자 디렉터리로 확장됩니다.(그리고 이러한 라인에 따른 우수한 솔루션이 제공되었습니다), 쉘 변수의 값 $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가 아닙니다.특별한쉘이 내장되어 있으므로 for 값을 선언해도 $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

답변4

Bash 기능과 완벽하게 작동합니다.

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

더 가까운 또 다른 방법이 있습니다. (요구 사항에 그다지 가깝지 않다는 것을 알고 있습니다.)

function ~~ { echo /test; }

그 다음에는 몇 가지 역할이 더 있습니다:

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

관련 정보