피시 쉘에 기본 인터프리터 설정

피시 쉘에 기본 인터프리터 설정

나는 설치했다mill아치 리눅스에서 나의 기본 쉘은 Fish입니다. 파일이 /usr/bin/millshebang으로 시작하지 않기 때문에 Fish는 파일을 실행하지 않습니다. 대신에 반응한다

$ mill
Failed to execute process '/usr/bin/mill'. Reason:
exec: Exec format error
The file '/usr/bin/mill' is marked as an executable but could not be run by the operating system.

mill을 실행할 수는 있지만 bash -c 'mill'항상 이 작업을 수행하고 싶지는 않습니다. 또한 이를 mill의 별칭으로 추가하고 싶지 않습니다. 스크립트에 shebang이 없을 때 실패하는 대신 항상 sh 또는 bash를 사용하도록 Fish를 구성할 수 있습니까? 아니면 OS 수준에 문제가 있는 걸까요?

편집하다: 밀(Mill)은 단지 하나의 예일 뿐입니다. 나는 Fish의 이 기능을 여러 번 접했고, 편집해서는 안 되는 다른 스크립트를 사용했습니다. 그렇기 때문에 공장에 대해 일회성 수정을 수행하는 대신 이 기능을 영원히 피할 수 있는 방법을 찾고 있습니다.

답변1

당신은 그렇게 할 수 없습니다.

당신은 그것을 확인할 수 있습니다소스 코드:

        execve(actual_cmd, argv, envv);
        err = errno;

        // Something went wrong with execve, check for a ":", and run /bin/sh if encountered. This is a
        // weird predecessor to the shebang that is still sometimes used since it is supported on
        // Windows. OK to not use CLO_EXEC here because this is called after fork and the file is
        // immediately closed.

그것이 어떻게 사용되는지 execve( execvp또는 대체의 경우 execlp), 그리고 (그 자체가 다소 의심스러운 기능입니다. 특히 다른 오류의 맥락에서 사용하는 경우) 스크립트만 실행한다는 점에 유의하십시오./bin/sh pathENOEXEC/bin/sh:fishENOEXEC

하지만 스크립트를 편집해서 :시작 부분에 a를 추가할 수 있다면, 적절한 셔뱅을 추가하도록 편집할 수도 있습니다.

관련 정보