~~
바로 가기로 사용할 수 있도록 다른 디렉토리를 가리키고 싶습니다 . 나는 그것이 정확히 같은 기능을 갖기를 원합니다 ~
. 어떻게해야합니까?
답변
실제로, 방법이 있습니다. 좋은 방법은 아니지만 방법입니다. 하하!
/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