한 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라는 디렉토리로 확장됩니다 j0h에 jay, 다시 존재할 가능성이의 홈 디렉토리.
그것은 아니다 ~및 ~/곳의 차이가 발생하지만,에 ~와 ~foo.
또한 ~디렉토리 히스토리 탐색에도 사용할 수 있습니다.
~-이전 작업 디렉토리입니다 (예$OLDPWD🙂~+현재 작업 디렉토리입니다 (예$PWD🙂
작업 중에 scp디렉토리를 변경할 수 없으므로이 기능은 적용 할 수 없습니다 scp.
그리고 당신이 사용하는 경우 pushd와popd 디렉토리 스택을 유지하기 위해, 그리고 것 의 출력에서 볼 수 있듯이, 디렉토리 스택의 일 디렉토리 . 것 (두 경우 모두 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
각 로컬 사용자 및 홈 디렉토리가 나열됩니다.