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

나는이 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제공됩니까?



답변

noexec즉, “예상”행동 할 것이기 때문에 플래그는 적절하게, 스크립트에 적용됩니다.

그러나 설정 noexec은 자신이하는 일에 대해 잘 모르는 사람들 만 막습니다. 실행 sh foo.sh하면 실제로로 마운트 된 파일 시스템에없는 sh기본 위치 (아마도 /bin) 에서 실행 됩니다 noexec.

당신은 주위를 얻을 수 있습니다 noexec호출하여 일반 바이너리 파일을 ld직접.

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

이것으로 마운트 된 파일 시스템에 있는지 여부에 관계없이 bash를 실행합니다 noexec.


답변

MS-DOS 2 바이트 (캐리지 리턴 줄 바꿈) 줄 끝으로 파일을 실행하려고하면이 오류 (또는 매우 유사한 메시지)가 표시 될 수도 있습니다.

Vim은 요즘 너무 똑똑해서 캐리지 리턴을 ‘^ M’으로 표시하지 않아도됩니다. 따라서 Vim이 “파일 형식”이라고 생각하는 것을 확인하지 않고 화면 모양에만 의존하면 속일 수 있습니다.

이 경우 “#! / bin / sh ^ M”은 커널이 “/ bin / sh ^ M”을 찾지 못하도록합니다. 실제로 나쁜 통역사.


답변

USB 스틱 (또는 기타 이동식 미디어)에서 스크립트 나 프로그램을 실행할 수있는 옵션이 있으면 마운트를 해제하고 수동으로 다시 마운트 해보십시오.

  1. USB 스틱 연결

  2. USB 스틱 장치 찾기 $ mount

  3. 참고하십시오. 그것이 있다고 가정하자/dev/sdb1

  4. USB 스틱 마운트 해제 :

    $ cd /media/removable
    
    $ sudo umount mountpoint

마지막으로 USB 스틱을 다시 마운트하십시오.

$ sudo mount /dev/sdb1 mountpoint

마운트 포인트를 사용하면 USB 스틱의 마운트 이름


답변

ChromeOS / ChromiumOS의 시스템 보안상의 이유로 특정 폴더가 표시 noexec되어 있으므로 아래 명령으로 다시 마운트하거나 noexec두 번째 예제와 같이 설정 되지 않은 대체 경로를 사용해야합니다 .

이 명령은 최소한 개발자 모드에 있고 sudo 비밀번호를 알고있을 뿐 아니라 shellwith에 액세스 할 수 있다고 가정 합니다.chronos@localhost / $crosh>

sudo mount -i -o remount,exec /home/chronos/user/

Google은 /usr/local개발자 를 위해 대부분을 보유하고 있으므로 업그레이드 후에도 지속 가능한보다 지속 가능한 방법 :

sudo mkdir -p /usr/local/bin/ && sudo chown -R chronos: /usr/local/bin/
cp ${HOME}/Downloads/foo.sh /usr/local/bin/

여기에 물건을 넣어의 또 다른 이점은에 있다는 것입니다 $PATH이미 (시도 echo $PATH당신이에 스크립트 나 바이너리 실행하는 전체 경로를 사용할 필요가 없습니다 있도록이 확인) /usr/local/bin하고 있었다 chmod +x그들에 실행합니다.


답변

나는 같은 질문을했다. 내 문제는 SD 카드에 관한 것이었다. 이것은 저에게 효과적이며 여기의 다른 답변보다 훨씬 간단합니다. Crouton issue # 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”가 마운트 옵션에서 사라 지므로 원하는 효과가 있음을 알 수 있습니다.