'$'와 '$'의 차이점은 무엇인가요? foo'와 '$./foo'? [복사]

'$'와 '$'의 차이점은 무엇인가요? foo'와 '$./foo'? [복사]

t 간단한 스크립트를 사용하면 다음 두 경우의 차이점은 무엇입니까?

$ .  t

그리고

$ ./t

답변1

. tt를 실행하기 위해 새 셸이 열리지 않으므로 생성되거나 수정된 ​​모든 변수는 실행 후에도 유지됩니다. t는 $PATH에서 검색되므로 현재 있는 경로에서 t를 실행하려는 경우 명령은 다음과 같습니다.. ./t

./tt가 실행될 것이며, 이는 이제 쉘 실행을 생성하는 경로에 있습니다.

다시 한번 확인하기 위해. t에 다음이 포함되어 있다고 가정합니다.

#!/bin/bash 
data=hello 

뒤쪽에./t명령줄에서 이를 수행할 수 echo $data있으며 아무 것도 얻지 못하지만 계속 달리면 . ./t화면 echo $data에 인사말이 표시됩니다.

답변2

$ . somescript.sh이 경우 the는 .the의 동의어이다.source내장. 이는 마치 현재 셸에서 해당 명령을 입력하는 것처럼 인수( somescript.sh내 경우에는 귀하의 것)를 읽습니다.t

$ ./somescript.shsomescript.sh스크립트는 자체 쉘에서 실행됩니다. 이 경우 .실행 경로의 상대 부분으로 사용됩니다. Linux 및 Unix(및 Bash가 설치된 경우 Windows)의 Bash에서 파일을 실행하려면 실행 파일의 전체 경로를 제공해야 합니다. ./경로의 시작 부분을 사용하면 Bash가 현재 디렉터리를 사용하도록 지시합니다.

두 번째 경우에는 Bash에서 실행 파일이 실행되는 방식입니다. 첫 번째 경우 파일은 Bash 파일이어야 합니다.

답변3

동일한 셸에서 스크립트를 실행하는 또 다른 중요한 효과는 exit명령이 자체 셸을 종료한다는 것입니다. 스크립트에서 환경 변수나 파일이 존재하는지 확인하는 것이 일반적입니다. 예를 들면 다음과 같습니다.

if [ -z $JAVA_HOME ]; then
        echo "JAVA_HOME variable is not set. Exit..."
        exit 1
fi

이 스크립트를 사용하면 source오류를 볼 수 없습니다(JAVA_HOME을 설정하지 않은 경우). 터미널이 닫히거나 SSH 세션이 종료됩니다. 또는 이렇게 하면 이전 사용자로 돌아가게 됩니다 su.

따라서 스크립트를 가져오는 것보다 기본적으로 서브셸에서 스크립트를 실행하는 것이 더 좋습니다.

답변4

점은 .현재 디렉터리를 나타내므로 tif is 내부의 간단한 스크립트가 결과를 제공하고 존재하지 않는 오류를 생성합니다./home/someuser.t/home/someusert

슬래시는 /스크립트에 올바른 경로를 제공하므로 ./t결과 /home/someuser/t, 즉 스크립트에 대한 올바른 경로를 제공합니다.

관련 정보