프로그램 적으로 bash 스크립트를 실행 가능하게 만들기


12

드라이브를 만들고 마운트하려면 bash 스크립트를 만들어야합니다. 두 가지 간단한 명령입니다. 명령 행에 입력 할 때 "작업".

스크립트는 일반 사용자가 로그인 할 때마다 생성 및 실행되므로이 ​​시점에서이 스크립트를 실행 가능하게 만드는 방법이 필요합니다. 지금까지는 작동하지 않습니다. 예를 들어, mkdir /vvv/gggg스크립트가 실행 가능하지 않기 때문에 첫 번째 부분 이 진행되지 않습니다 (추정 중입니다).

이것이 의미가 있기를 바랍니다. 이게 가능해? 이 작업을 수행하는 방법에 대한 모든 의견을 부탁드립니다.

업데이트 :

답변 주셔서 감사합니다. Linux에 익숙하지 않은 추가 정보를 추가해야 할 수도 있습니다.

Ulteo라는 오픈 소스 가상 데스크톱 응용 프로그램을 사용하고 있습니다. 이 응용 프로그램은 우분투 위에서 실행되며 지원이 거의 없습니다. 기본적으로 나는 불로 배우고 있습니다.

따라서 응용 프로그램에는 스크립트를 사용자와 연결할 수있는 로그인 스크립트 관리 기능이 있습니다. 인터넷을 사용하는 간단한 Windows 스크립트는 완벽하게 작동합니다. 그러나 Linux bash 스크립트를 적용하려고하면 아무 일도 일어나지 않습니다.

chmod +x스크립트를 실행 파일로 만들기 위해 스크립트에 대해 먼저 수행해야하기 때문에 이것이 실패하는 이유 라고 생각합니다 . 그건 그렇고, Ulteo는 chroot jail에서 실행됩니다. 스크립트를 만들어 저장했는데 스크립트를 찾을 수 없습니다. 나는 chroot 교도소 안팎에서 수색했다.

나는 dan08에 의한 접근 방식이 초기 스크립트가 수동으로 찾고 실행할 수있는 다른 스크립트를 참조하도록하는 것을 좋아합니다. 같은 문제가 발생합니까?

이 추가 정보가 상황을 명확하게합니까? 미리 감사드립니다.

사진이 첨부되었습니다.

! [로그인 scipt 관리 콘솔] [1]

! [작동하는 Windows 스크립트] [2]

! [작동하지 않는 간단한 리눅스 스크립트] [3]

죄송합니다. 아직 이미지를 게시 할 수 없습니다


사용자가 로그인 할 때마다 스크립트를 실행하기위한 크론 작업을 작성 하시겠습니까? 이 안내서는 그것들을 실행 가능하게 만드는 데 도움이 될 것입니다 .
수면 박탈 Bulbasaur

1
"일반 사용자가 기록 할 때마다 스크립트가 생성되고 실행됩니다"왜? 비논리적으로 들리므로이 문제를 해결하겠습니다. 스크립트에 매개 변수로 사용자에게 피드하고 스크립트를 만든 후에는 그대로 둡니다.
Rinzwind

1
질문에 이상한 시제가 혼합되어있어 현재 발생하는 일과 원하는 일 에 대해 혼란스러워 합니다. 현재 상황에 대해 좀 더 구체적으로 설명하면 도움이 될 것입니다.
Oli

제발 편집 질문을 우리에게 스크립트를 보여줍니다. 또한의 출력을 보여주십시오 ls -l scriptname. 또한 정확하게 스크립트가 작성되는 방식과 스크립트를 한 번만 작성하여 혼자 두지 않는 이유를 명확하게 설명해야합니다. 마지막으로 일반 사용자는 쓰기 권한이 /var없어 디렉토리를 만들 수 없습니다.
terdon

1
주석에 이미지 링크를 게시하십시오. 제안 된 수정 사항을 통해 가져옵니다.
muru

답변:


19

당신이해야 할 두 가지가 있습니다 :

  1. 스크립트 시작 부분에서 스크립트 인터프리터를 참조하십시오.

    #!/bin/bash
  2. 실행 가능하도록 권한을 설정하십시오.

    chmod +x myscript.sh

3

스크립트를 실행 가능하게 만드는 대신 다른 접근 방식을 사용하여 스크립트 호출 방식을 변경할 수 있습니다.

script.sh 실행 스크립트를 실행하기에 충분합니다.

하나

실행할 프로그램을 지정하면 실행 불가능한 스크립트를 실행할 수 있습니다.

그래서 /bin/bash script.shbash script.sh또는 python script.py모든 비 실행 스크립트를 실행합니다.

따라서 스크립트가 호출되는 방식을 편집하고 스크립트를 실행하는 데 사용되는 이진 파일을 지정하는 것이 좋습니다.


내 측면에서 나는 일반적으로 파일을 실행 가능하게 만듭니다. 그렇지 않으면 파일 자체를 다시 시작할 수 없기 때문입니다. 예를 들어, 파이썬 os.execv(__file__, sys.argv)은 작동하지 않으며 확실히 더 많은 상황이 있습니다. 보안이 목표라면 root / sudo에서 보안을 사용하여 사용자가 바이너리를 실행할 수있게하십시오. 또한 목표가 보안 인 경우 어쨌든 시스템을 손상시킬 수 있기 때문에 스크립트 실행을 원하지 않습니다. 따라서 실행 파일을 피하는 것이 왜 중요한지 모르겠습니다.
m3nda

0

C, C ++ 또는 Python 등으로 프로그램을 작성하고 시스템 명령을 사용하여 bash 스크립트를 실행하십시오.

예를 들어 C 프로그램은 다음과 같습니다.

#include "stdio.h"
int main(int argc, char const *argv[])
{
    system('chmod +x path/yourbashscript.sh');
    system('path/yourbashscript.sh');
    return 0;
}

시작시 프로그램을 실행하려면 시작 프로그램 목록에 프로그램을 추가하십시오. 대시에서 시작 응용 프로그램을 열고 추가 버튼을 클릭하여 컴파일 된 실행 파일을 목록에 추가하십시오.


2
-1 : 이것은 실제로 답이 아닙니다. 왜 파이썬이 쉘 스크립트보다 나은가요? C는 물론입니다! 어쨌든이 프로그램의 모양을 실제로 표시하지 않고 시작 프로그램 목록에 프로그램을 추가하는 방법을 설명하지 않습니다.
terdon

나는 내 대답을 편집 한 나머지 부분에 대한 귀하의 첫 번째 질문에 대한 대답은 프로그래밍 언어가 스크립트 언어와 다른 방법을 설명 의해 주어질 수있다
akxer

편집 해 주셔서 감사합니다. -1이 제거되었습니다. 그러나 C 프로그램을 사용하여 Linux에서 쉘 스크립트를 시작하는 것은 완전히 불필요하며 불필요한 오버 헤드를 추가합니다. 왜 스크립트 자체를 시작 응용 프로그램에 추가하지 않습니까? 또는 C를 정말로 사용하고 싶다면 직접 구현하지 않겠습니까? Linux에서 쉘 스크립트를 호출하는 랩퍼를 C로 작성하는 것은 SUID 비트 세트로 스크립트를 실행해야하는 경우가 아니면 전혀 의미가 없습니다. 이 경우에도 일반적으로 더 간단한 솔루션이 있습니다.
terdon

1
-1 : 스크립트에 실행 권한이없는 경우 여전히 실패합니다. 에 전화해야합니다 bash path/yourbashscript.sh.
muru

1
bash path/yourbashscript.sh이 C 프로그램을 컴파일하고 실행하는 대신 직접 실행하지 않는 이유는 무엇입니까?
muru

0

명령 행에서 다음을 실행하여 bash 스크립트를 실행 가능하게 만들 수 있습니다.

cd ~/path/to/file
chmod +x nameoffile.sh

그런 다음 @akabhirav가 말한 것처럼 시작 프로그램 목록에 추가하여 시작시 실행되도록 할 수 있습니다.


그것은 (어쩌면) 질문이 그가 chmod하는 방법에 익숙하다는 것을 보여줍니다. 그러나 그는 스크립트 자체에서 실행 가능하게 만드는 방법을 요구하고 있습니다 (따라서 수동으로 할 필요는 없습니다). 나는 여전히 그 방법에 의문을 제기하지만, 즉석에서 스크립트를 재생성하는 것은 이것을 할 수있는 방법이 아니다.
Rinzwind

0

SHC 는 일반적인 쉘 스크립트 컴파일러입니다. 명령 행에 지정된 스크립트를 사용하여 C 소스 코드를 생성합니다. 그런 다음 생성 된 소스 코드를 컴파일하고 링크하여 이진 스트립을 생성합니다.

컴파일 된 이진 파일은 쉘 코드의 첫 번째 행 (shebang : #!/bin/sh등)에 지정된 쉘에 계속 의존 하므로 SHC는 완전히 독립적 인 이진 파일을 만들지 않습니다.

SHC 자체는와 같은 컴파일러가 아닙니다 cc. 오히려 셸 스크립트를 인코딩 및 암호화하고 만료 기능이 추가 된 C 소스 코드를 생성합니다. 그런 다음 시스템 컴파일러를 사용하여 원본 스크립트와 똑같이 동작하는 제거 된 바이너리를 컴파일합니다. 실행되면 컴파일 된 바이너리는 셸 -c옵션으로 코드를 해독하고 실행합니다 .


실행 파일에 여전히 원래 셸 환경이 필요한 경우이 점은 무엇입니까? #!과를 추가하는 것보다 어떻게 더 좋 chmod +x습니까?
xiota
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.