hello_world.c
간단한 파일이 있어요여기. 나는 그것을하는 방법을 알아 냈습니다.
gcc -Wall -g hello_world.c -o hello
작동 중이지만 실행하면 bash hello
오류가 발생합니다.hello: hello: cannot execute binary file
sh hello
그런 다음 오류: hello: 1: Syntax error: "(" unexpected
./hello
예상 줄이 인쇄되었습니다.
셋 다 똑같은 줄 알았는데 결과부터가 아닙니다. 왜 다른 두 개는 작동하지 않습니까? 이 외에도 ./hello
이 파일을 호출하는 다른 방법이 있습니까 hello
?
답변1
처음 두 번의 시도 bash hello
및 에서는 파일이 셸 실행 파일임을 이러한 셸( 및 sh hello
각각 )에 확신시키려고 합니다. 바이너리 파일이기 때문에 쉘은 파일을 실행하라는 지시를 받고 무엇을 해야 할지 모르기 때문에 이러한 오류 메시지를 표시합니다. 세 번째 예에서는 셸이 실행을 기대하는 것처럼 바이너리를 바이너리로 실행합니다. 이는 단순히 현재 디렉터리( )에서 바이너리를 찾을 수 있는 위치를 나타내는 표시일 뿐입니다 . 왜 필요한가요 ? 대부분의 경우 "현재 작업 디렉터리"는 변수의 일부가 아니므 로 단순히 실행해도 실행 파일을 어디에서나 찾을 수 없습니다.bash
sh
hello
hello
./
.
./
$PATH
hello
답변2
Linux 스크립트를 실행하기 위해 ./(점-슬래시)를 사용하는 이유는 무엇입니까?
Unix ./script 구문은 세 부분으로 설명할 수 있습니다.
Linux./ 표기법에서 애플리케이션 PATH의 역할은 현재 디렉터리가 기존 명령과의 충돌을 피해야 함을 나타냅니다.
Unix 점슬래시 및 PATH 각 컴퓨터에는 애플리케이션 경로가 있습니다. 이는 실행 가능한 명령이나 실행 가능한 스크립트가 호출될 때 운영 체제가 찾는 디렉터리 모음입니다.
익숙한 모든 내장 명령(예: ls, cat, echo, touch 및 chmod)은 애플리케이션 PATH에 있습니다. 사용자는 일반적으로 JDK 또는 Git에서 일반적으로 사용되는 프로그램을 애플리케이션 PATH에 넣습니다.
문제는 직접 작성한 스크립트를 호출하려고 하면 해당 스크립트가 애플리케이션 경로에 포함된 폴더에 저장되지 않을 수 있다는 것입니다. 즉, PATH에서 명령과 같은 사용자 정의 스크립트를 실행하면 Linux 운영 체제가 해당 스크립트를 찾지 못합니다.
Linux에서 ./의 의미 여기에 점 슬래시 ./ 기호가 들어오는 곳입니다. 이는 "현재 디렉토리에서 찾기"를 의미합니다. ./를 사용하면 Ubuntu, Fedora, SUSE 또는 사용 중인 모든 Linux 배포판에서 실행하려는 명령을 현재 디렉터리에서 찾고 애플리케이션 PAT에 있는 내용을 완전히 무시하도록 지시합니다.