bash 스크립트 소스 : 해당 파일 또는 디렉토리 없음


9

이런 식으로 시작하는 스크립트가 있습니다

#!/bin/bash
VALKYRIE=~/myProjects/valkyrie
source $VALKYRIE/cluster.conf

하지만 내가 그것을 실행하면 반환 line 2: ~/myProjects/valkyrie/cluster.conf: No such file or directory

그러나 파일이 존재하고 실행할 때 source ~/myProjects/valkyrie/cluster.conf정상적으로 실행됩니다. 어떤 생각? VALKYRIE변수를 다른 곳에 설정 하면 경로의 하드 코드가 옵션이 아닙니다.


이것이 도움이되는지 100 % 확신 할 수는 없지만 ~에 공백이있는 경우 변수를 완전히 인용 할 수 있습니다. 따라서 source "${VALKYRIE}/cluster.conf".
Sparhawk 2018 년

아니요, 도움이되지 않습니다.
Khoi

1
~제대로 확장되지 않는 것과 관련이 있다고 생각합니다 . 의도적으로 가짜 경로로 스크립트를 실행하면 오류가 나타나지 않지만 ~경로가 확장됩니다. ~스크립트에서를 절대 경로로 바꾸어 볼 수 있습니까 ? 또한 스크립트에서 다음을 실행하십시오 echo ~.
Sparhawk

2
$HOME대신에 시도 할 수도 있습니다 ~.
Sparhawk

3
@Khoi 그것은 그것을 설명합니다. ~/.pam_environment은 쉘 스크립트가 아니므로 물결표 확장 및 매개 변수 확장과 같이 쉘에서 예상되는 일반적인 작업을 수행하지 않으므로 대체 ~하거나 $HOME대체 하지 않습니다 . 해당 줄을 ~/.profile대신 이동하고 export 앞에 추가 하면 작동합니다.
geirha

답변:


8

~제대로 확장되지 않는 것 같습니다. 내가 의도적으로 가짜 경로로 스크립트를 실행하면 오류가 말을하지 않습니다 ~,하지만 경로 (예 : 확장 /home/sparhawk/fakepath하지 ~/fakepath. 당신은 사용을 시도 할 수 $HOME대신 ~, 나 대신 스크립트의 전체 경로를 사용하여.

( ~스크립트가 제대로 작동하기 때문에 왜 시스템에서 작동 하지 않는지 잘 모르겠습니다 .)


bash가 확장을 수행하는 순서 ( gnu.org/software/bash/manual/bashref.html#Shell-Expansions )를 보면 변수 확장 전에 물결표 확장이 발생 함 을 알 수 있습니다. 사용자들은 왜 $HOME더 나은보다 ~변수에
글렌 잭맨

@glennjackman 잘 모르겠습니다. 변수 대 우선 순위가 중요한 이유는 무엇 ~입니까?
Sparhawk

1
정확히 "우선 순위"가 아니라 단순히 무엇보다 먼저 나오는 것입니다. 고려 x="~/.bashrc"; ls $x, 물결표의 "LS"명령, bash는 외모에 대한 확장의 순서대로 하나를 찾을 수 없습니다 - 결국 bash는 변수를보고 확장합니다. bash는 돌아 가지 않고 물결표를 다시 찾습니다.이 시점에서 그것은 평범한 캐릭터 일뿐입니다. 현재 디렉토리에는 물결표로 시작하는 파일이 없습니다.
글렌 잭맨

아 알았어 나는 그것을 얻는 것 같아요. 나는 왜 그 명령이 실패하고 x=~/".bashrc"; ls $x작동 하는지 궁금했습니다 . 정보에 대해서 감사드립니다.
Sparhawk 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.