~~
바로가기로 사용할 수 있도록 다른 디렉토리를 가리키고 싶습니다 . 나는 그것이 정확히 동일한 기능을 갖기를 원합니다 ~
. 어떻게 해야 하나요?
답변1
사실 아주 좋은 방법은 아니지만 방법은 있어요. 하하!
파일 에 다음을 추가합니다 /etc/passwd
.
~:x:1111:99:special Character user:/test:/sbin/nologin
UID를 1111
의미 있는 것으로 바꾸십시오. /test
에뮬레이트하려는 디렉토리 로 바꾸십시오 ~~
.
99
nobody
내 시스템에서는 그룹 입니다 . 그룹인지 확인하려면 이렇게 하는 것이 좋습니다.아니요사용될 모든 파일에 대한 권한. 이론상으로는 /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