Chrome OS에서 Bash는 내 스크립트를 실행하지 않습니다. Bash에서 스크립트를 실행하려면 어떻게 해야 하나요?

Chrome OS에서 Bash는 내 스크립트를 실행하지 않습니다. Bash에서 스크립트를 실행하려면 어떻게 해야 하나요?

foo.sh현재 디렉토리에 파일이 있습니다. 실행하려고 하면 다음과 같은 결과 ./foo.sh가 나타납니다.

-bash: ./foo.sh: /bin/sh: bad interpreter: Permission denied

하지만 실행해 보면 /bin/sh ./foo.sh괜찮습니다.

./foo.sh실행할 수 있고 자동으로 /bin/sh를 사용하여 실행할 수 있도록 이 문제를 어떻게 수정합니까 ?

편집: 좋습니다 . 이것은 Chrome OS이고 이 특정 폴더는 noexec../foo.sh왜?sh foo.sh달리기를 통해 여전히 같은 목표를 달성할 수 있나요? 그렇다면 noexec어떤 안정감을 가져오나요?

답변1

noexec플래그는 "예상된" 동작이므로 스크립트에 적절하게 적용됩니다.

그러나 이러한 설정은 noexec자신이 하고 있는 일에 대해 충분히 알지 못하는 사람들을 방해할 뿐입니다. 실행하면 sh foo.sh실제로는 더 이상 사용되지 않는 sh기본 위치(아마도)에서 실행됩니다 ./binnoexec

noexec직접 전화하여 일반 바이너리를 얻을 수도 있습니다 ld.

cp /bin/bash $HOME
/lib/ld-2.7.so $HOME/bash

을 사용하여 위치를 찾았는지 여부에 관계없이 bash를 실행합니다 noexec.

답변2

MS-DOS 2바이트(캐리지 리턴 및 라인 피드) 줄 끝이 있는 파일을 실행하려고 하면 이 오류(또는 매우 유사한 메시지)가 나타날 수도 있습니다.

요즘 Vim은 캐리지 리턴을 반드시 "^M"으로 표시하지 않을 정도로 똑똑합니다. 따라서 Vim이 생각하는 "파일 형식"이 무엇인지 확인하지 않고 화면에 나타나는 방식에만 의존한다면 속을 수 있습니다.

이 경우 "#!/bin/sh^M"으로 인해 커널은 "/bin/sh^M"을 찾으려고 시도하지만 찾을 수 없습니다. 참으로 형편없는 번역이다.

답변3

USB 스틱(또는 기타 이동식 미디어)에서 스크립트나 프로그램을 실행할 수 있는 옵션이 있는 경우 수동으로 제거하고 다시 설치해 볼 수 있습니다.

  1. USB 플래시 드라이브 삽입

  2. USB 스틱 장치 찾기$ mount

  3. 그것을 기록해 두십시오./dev/sdb1

  4. USB 플래시 드라이브 제거:

    $ cd /media/removable
    
    $ sudo umount mountpoint
    

마지막으로 USB 드라이브를 다시 설치합니다.

$ sudo mount /dev/sdb1 mountpoint

USB 스틱의 마운트 포인트 이름을 사용하십시오.

답변4

나는 같은 문제를 가지고있다. 내 문제는 SD 카드에 있습니다. 이것은 나에게 도움이되었으며 여기의 다른 답변보다 훨씬 간단합니다. 난 거기서 배웠어크루통 질문 #928.

$ sudo mount -o remount,exec /media/removable/SD\ Card

장치(/dev/mmcblk1p1)가 아닌 마운트 지점을 사용해야 합니다. 귀하의 경우에는 USB(/dev/sdb1)도 마찬가지입니다. 마운트 지점만 다릅니다.

$ sudo mount -o remount,exec /media/removable/USB\ Drive

쿼리할 때 마운트 옵션에서 "noexec"가 사라지므로 원하는 효과가 있다는 것을 알 수 있습니다.

관련 정보