물결표를 홈 디렉토리에 대한 바로 가기로 사용하는 방법은 무엇입니까? jay@server.ip:~/j0h/b 이것처럼 : scp

한 PC에서 다른 PC로 일부 파일을 복사하려고하면서 혼란 스러웠습니다. 알아 냈지만 구문은 여전히 ​​혼란 스럽습니다. 이것은 작동합니다 :

scp ~/Desktop/Volenteer.png jay@server.ip:~j0h/b

Volenteer.png폴더에 넣 습니다 /home/j0h/b. 그러나 이것은 작동하지 않습니다.

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

또한 종료 상태 1 파일을 찾을 수 없으므로 실패합니다.

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

이것처럼 :

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

그래서 분명히 사이에 약간의 차이가 ~~/
차이 즉 존재한다/

$~/
bash: /home/j0h/: Is a directory
$ ~
bash: /home/j0h: Is a directory

그렇다면 왜 scp에서 ~해결 ~/됩니까? 그것은 추측입니다, 나는 그것이 일어나고 있음을 확인할 수 없습니다. 그러나 일관성이 없어 혼동되는 것 같습니다. 이것은 scp의 버그입니까? 아니면 내가 놓친 물결표에 대한 것이 있습니까?



답변

~ 홈 디렉토리입니다.

~foo는 user의 홈 디렉토리입니다 ( foo이러한 사용자가 존재하는 경우). 또는 ~foo해당 사용자가없는 경우 이름이 지정된 디렉토리 입니다.


따라서

scp ~Desktop/Volenteer.png     jay@server.ip:~j0h/b

~DesktopDesktop그러한 사용자가 존재하고 (보통 존재하지 않는) 또는 단지 ~Desktop(보통 존재하지 않는 경로 ) 경우 user의 홈 디렉토리로 확장됩니다 .


에서:

scp ~/Desktop/Volenteer.png     jay@server.ip:~/j0h/b

~/j0h라는 디렉토리로 확장됩니다 j0hjay, 다시 존재할 가능성이의 홈 디렉토리.


그것은 아니다 ~~/곳의 차이가 발생하지만,에 ~~foo.


또한 ~디렉토리 히스토리 탐색에도 사용할 수 있습니다.

  • ~-이전 작업 디렉토리입니다 (예 $OLDPWD🙂
  • ~+현재 작업 디렉토리입니다 (예 $PWD🙂

작업 중에 scp디렉토리를 변경할 수 없으므로이 기능은 적용 할 수 없습니다 scp.

그리고 당신이 사용하는 경우 pushdpopd 디렉토리 스택을 유지하기 위해, 그리고 것 의 출력에서 볼 수 있듯이, 디렉토리 스택의 일 디렉토리 . 것 (두 경우 모두 0에서 계산) 끝에서 일 디렉토리. 예를 들면 다음과 같습니다.~N~+NNdirs~-NN

$ for i in etc usr var tmp; do pushd /$i; done
/etc ~/.vim
/usr /etc ~/.vim
/var /usr /etc ~/.vim
/tmp /var /usr /etc ~/.vim

$ dirs
/tmp /var /usr /etc ~/.vim

그런 다음 다음을 사용하여 스택의 디렉토리에 액세스 할 수 있습니다.

/tmp /var /usr /etc ~/.vim
  ~0   ~1   ~2   ~3     ~4
 ~+0  ~+1  ~+2  ~+3    ~+4
 ~-4  ~-3  ~-2  ~-1    ~-0
  ~+   ~-


답변

Bash Tilde Expansion에 대한 GNU 문서를 읽어보십시오 (이 답변을 처음 반복하기 전에해야합니다).

~/Desktop~j0h이유가 설명, 근본적으로 다른 일을하는 ~Desktop작동하지 않습니다

  • 평문 ~은 현재 $HOME환경 변수 로 대체 되며 로그인시 설정됩니다. 그래서 나를 위해 ~해결 /home/oli하고로 ~/Desktop읽습니다 /home/oli/Desktop. 여기에서 tilda가 가장 많이 사용되는 것을 볼 수 있습니다.

  • ~username에서 설정 한대로 해당 사용자 의 홈으로 확인 됩니다 /etc/passwd. 따라서으로 ~oli해결하고 /home/oli, 반드시 ~j0h해결할 수는 /home/j0h없지만, homedir은 어디에나있을 수 있습니다.

  • ~not-a-username해결되지 않습니다. Desktop사용자가 아니기 때문에 ~Desktop대체되지 않습니다. 문자 그대로 파일 또는 경로 ~Desktop(여기에 존재하지 않음)로 사용됩니다.

말할 필요도없이, 이것은 모두 원격으로 발생합니다 ( scp로컬 값으로 대체 된 경우 쓸모가 없습니다 ). 이것은 ~...공백 이외의 것이 앞에 있으면 Bash가 대체하지 않기 때문에 작동합니다 .


답변

상징 ~하는 단축키로 사용할 /home/user에서 bash그렇게하는 경우, ~/Desktop/Volenteer.png그것은 속기이다 /home/user/Desktop/Volenteer.png.

보시 /다시피 항상 그렇듯이 파일 시스템 계층의 새로운 수준을 보여줍니다.


답변

~$HOME대부분의 c 쉘 파생 / 지원 POSIX 호환 쉘 에서 환경 변수의 줄임말입니다 . 가장 일반적인 용도 ~는 자신의 홈 디렉토리 나 다른 사용자의 홈 디렉토리를 참조 할 때입니다.

cd ~ # ie shell, take me to my home folder

cd ~root # i.e. shell, take me to root's home folder

passwd (5) 데이터베이스를 사용하는 POSIX 시스템 (UNIX, Linux, OS X, BSD)에서 로컬 사용자의 홈 디렉토리를 찾으려면 다음 /etc/passwd과 같이 awk를 실행하십시오 .

awk -F: '{ print $1,$(NF-1) }' /etc/passwd

각 로컬 사용자 및 홈 디렉토리가 나열됩니다.


답변