그냥 고쳐
이 명령은 "ERROR : extract : path must be absolute"오류 메시지를 표시합니다.
./cuda_6.5.14_linux_64.run -extract=~/Downloads/nvidia_installers
이 오류는 도움이되지 않습니다. 프로그램이 이미 혼동되었습니다.
이미 오류가에서 알고 ~
그와 함께 작동하기 때문에, $HOME
대신.
문제 ~
는 단어가 시작될 때만 교체됩니다.
예를 들어, 이것은 물결표와 함께 작동합니다.
echo -extract ~/Downloads
옵션 구문이 필요한 경우 =
$ HOME 대신 $ HOME을 사용하는 ~
것이 가장 깨끗한 솔루션입니다.
echo -extract=$HOME/Downloads
연습
알아야 할 사항 :
~
단어가 시작되지 않을 때 get이 확장 되는 특수한 경우가 있습니다 : 변수 할당의 일부로 =
. 물론 여기서 혼란 스럽습니다.
다른 중요한 특별한 경우는 PATH와 같은 변수와 함께 사용하기위한 것입니다. 변수 할당에서는 첫 번째 ~
이후 :
와 같이 이후에도 확장 =
됩니다.
$ dir=~ sh -c 'echo D2: $dir'
D2: /home/user
$ sh -c 'echo D2: $dir' dir=~
D2:
$ echo Dir: $dir
Dir:
$ dir=~; sh -c 'echo D2: $dir'
D2:
$ echo Dir: $dir
Dir: /home/user
$ sh -c 'echo D2: $dir'; d3=~
D2:
$ echo d3: $d3
d3: /home/user
물결표의 의미
쉘 ~
에서 물결표는 실제로 경로가 아닙니다. 경로 ()로만 대체됩니다 $HOME
.
쉘에서 제공하는 속기 또는 약어와 같은 것입니다.
일반적으로 경로처럼 사용할 수 없으며, 쉘은 매우 특별한 장소에서만 경로로 "확장"합니다.
확장 되더라도 홈 디렉토리 이외의 다른 디렉토리 일 수 있습니다.
- 그것은 단지에서 확장 단어의 시작 A의, 또는 후 변수 할당
:
또는=
- 따옴표 안에 있지 않은 경우에만 확장됩니다.
- 단어 앞에 더 이상 문자
$HOME
가 없는 경우 에만 확장됩니다 ./
명령 줄의 문제
이것에 따르면, 명령의 문제는 물결표가
-extract=~/Downloads/nvidia_installers
이 사례 중 하나가 아니기 때문에 확장되지 않습니다. 그게 다야.
해결책은 물결표를 단어의 첫 번째 인용되지 않은 문자로 만들고 다음 문자 앞에 다른 문자를 넣지 않는 /
것입니다-옵션 인수 앞에 공백이있는 옵션을 사용할 때 얻는 것입니다.
-extract ~/Downloads/nvidia_installers
다른 해결책은 $HOME
대신 사용하는 것입니다. 스크립트에서는 일반적으로 더 나은 선택입니다.
-extract=$HOME/Downloads/nvidia_installers
오류 메시지
그러나 오류 메시지는
"ERROR: extract: path must be absolute."
어떻게됩니까?
이 모든 것에 맞습니까?
물결표가 확장되지 않았다는 것을 알고 있습니다. 즉, 프로그램은 경로를 포함 ~
하지 않고 인수 텍스트를 포함한다는 것을 의미합니다 /home/auser
. 그 길은 ~/Downloads/nvidia_installers
-지금은 껍질이 없기 때문에 물결표는 특별한 의미가 없습니다. 단지 일반적인 디렉토리 이름입니다. 그리고 양식의 다른 모든 경로와 마찬가지로 foo/bar/baz
상대 경로입니다.
다른 용도
위의 다른 모든 규칙과 ~
마찬가지로 ~alice
- 뒤에 문자 가 있고 사용자 이름 alice
이 있으면 그 alice
대신 홈 디렉토리로 확장됩니다 home/alice
.
또한,이 경우 bob
, ~
로 확장 것 /home/bob
, 그리고 ~bob
동일로 확장한다.
변형 ~+
이 현재 디렉토리로 확장됩니다.$PWD
마지막 디렉토리 이전의 이전 디렉토리를 참조하려면을 사용하여 확장 cd
할 수 있습니다 .~-
$OLDPWD
당신이 사용하는 경우 pushd
와 popd
대신, cd
이미 디렉토리 스택처럼 액세스 할 수 있는지 알게 될 것이다 ~-2
.
세부
~
경로 로 확장 된 모든 경우 는 쉘에 의해 처리됩니다 . 다른 프로그램의 ~
경우 일반적인 파일 이름 문자입니다.
대한 정확한 정의 쉘 내부, 여기의 관련 섹션
교체하는 방법을 참고 로하여 많은 경우 중 하나에 불과 특별한 경우가 : 이 로그인 이름이 널 (null) 문자열이 ", 물결표는 쉘 변수 홈의 값으로 대체됩니다. " :man bash
~
$HOME
Tilde Expansion
If a word begins with an unquoted tilde character (`~'), all of the charac‐
ters preceding the first unquoted slash (or all characters, if there is no
unquoted slash) are considered a tilde-prefix. If none of the characters
in the tilde-prefix are quoted, the characters in the tilde-prefix follow‐
ing the tilde are treated as a possible login name. If this login name is
the null string, the tilde is replaced with the value of the shell parame‐
ter HOME. If HOME is unset, the home directory of the user executing the
shell is substituted instead. Otherwise, the tilde-prefix is replaced with
the home directory associated with the specified login name.
If the tilde-prefix is a `~+', the value of the shell variable PWD replaces
the tilde-prefix. If the tilde-prefix is a `~-', the value of the shell
variable OLDPWD, if it is set, is substituted. If the characters following
the tilde in the tilde-prefix consist of a number N, optionally prefixed by
a `+' or a `-', the tilde-prefix is replaced with the corresponding element
from the directory stack, as it would be displayed by the dirs builtin
invoked with the tilde-prefix as an argument. If the characters following
the tilde in the tilde-prefix consist of a number without a leading `+' or
`-', `+' is assumed.
If the login name is invalid, or the tilde expansion fails, the word is
unchanged.
Each variable assignment is checked for unquoted tilde-prefixes immediately
following a : or the first =. In these cases, tilde expansion is also per‐
formed. Consequently, one may use filenames with tildes in assignments to
PATH, MAILPATH, and CDPATH, and the shell assigns the expanded value.