학교 시스템에서는 입력하지 bash않거나 csh스크립트 유형을 표시 하지 않고 스크립트 파일을 실행할 수 있습니다. 그러나 우분투에서는 bash script.bash예를 들어 입력해야합니다 . 우분투에서 항상 필요합니까, 아니면 변경할 수있는 설정입니까?
.shbash 스크립트를 사용하지 않는 경우 +1 그러나 일반적으로 파일 확장명은 UNIX 환경에서 실행 가능한 스크립트에 사용되지 않습니다.
학교 시스템에서는 입력하지 bash않거나 csh스크립트 유형을 표시 하지 않고 스크립트 파일을 실행할 수 있습니다. 그러나 우분투에서는 bash script.bash예를 들어 입력해야합니다 . 우분투에서 항상 필요합니까, 아니면 변경할 수있는 설정입니까?
.shbash 스크립트를 사용하지 않는 경우 +1 그러나 일반적으로 파일 확장명은 UNIX 환경에서 실행 가능한 스크립트에 사용되지 않습니다.
답변:
./script전체 경로 또는 기타로 스크립트를 시작하십시오 . 그냥 script않을 수없는 작품은 (는 디렉토리에있는 경우 작동 $PATH과 같은, /usr/binUNIX 시스템에서이 경로에 현재 디렉토리를하는 습관이 아니다 이후 (보안상의 이유로, 그리고 그것의 좋은!))
스크립트가 실행 가능한지 확인하십시오 (예 : chmod +x script실행 가능하게 함).
#!/bin/bash스크립트의 첫 번째 줄 이 있어야 합니다. 또한 일종의 Windows 편집기를 사용하여 편집하지 마십시오. 유닉스와는 다른 eol (end of line)의 "DOS 유형"을 사용하기 때문에 (위의 체크리스트가 정상이지만 "나쁜"경우 인터프리터 : 그러한 파일이나 디렉토리가 없습니다. "/ bin / bash 인 경우에도 인쇄 할 수 없기 때문에 종종 그 이유가 있습니다. 따라서 일반적으로 보지 않습니다. \ r은 통역사 경로)
이미 언급 한 다른 사람들 : /bin/bashbash 기능을 사용하고 /bin/sh심볼릭 링크를 사용하는 것이 중요 /bin/bash하지만 요즘 (내가 아는 dash한) POSIX 만 bash 호환성을 제공하지 않는 심볼릭 링크가 sh있습니다. 우리 회사의 매우 비싼 소프트웨어 조차도이 문제가 중요합니다. 스크립트 #!/bin/sh는 첫 번째 줄로 포함되지만 bash 기능에도 의존합니다.
#!/usr/bin/env bash는 약간 더 휴대하기 쉽다.
대안으로 강력히 권장하지 않는 방법은에 추가 .하는 것 PATH입니다.
PATH=".:$PATH"
또는
PATH="$PATH:."
이 방법의 문제점은 전자의 경우 모든 시스템 명령이 현재 디렉토리의 실행 파일로 대체 될 수 있고 후자의 경우 알 수없는 명령이 여전히 재정의 될 수 있다는 것입니다.
다음을 고려하세요:
#!/bin/bash
./my_malicious_script &>/dev/null
/bin/ls "$@"
너무 늦을 때까지 눈치 채지 못할 것입니다.
echo예를 들어, 현재 작업 디렉토리에 시스템 디렉토리에있는 것과 동일한 이름을 가진 명령이있는 경우, 예 를 들어 디렉토리에있는 명령이 해당 디렉토리가 PATH변수 앞에 설정되어 있기 때문에 단순히 디렉토리의 명령이 사용됩니다 /bin. 셸은의 순서에 따라 특정 디렉토리에서 명령을 찾기 만하 PATH며 어떤 것도 무시 / 파기하지 않습니다. 그러나 네, 이것은 의미가 있습니다