편집하다

편집하다

[편집 - 시간을 절약해 줍니다. 상황을 더 잘 표현해이 항목]

Ubuntu Mate에서는 작동하지만 Lubuntu Minimal(+LXDE)에서는 작동하지 않는 shebang 스크립트가 있습니다.

검색을 통해 필요한 것을 얻을 수 없어서 지금은 헤매고 있습니다.

내 첫 번째 스크립트는 Ubuntu Mate(xenial) 호스트에서 작성되었으며 매우 쉽게 실행되었습니다. 이 버전은 이 글의 마지막 부분에 있습니다.

동일한 스크립트를 내 VM Lubuntu Minimal 머신(수동으로 재작성 - 공유되지 않음)으로 가져왔고 문제가 발생했습니다.

Lubuntu Minimal에서는 다양한 포럼에서 수집한 다음 shebangs를 시도했습니다.

#!/bin/bash호스트에서 잘 작동합니다

#!/bin/sh

#!/usr/bin/env bash

출력(주로):

bash: /home/user/bin/script1: [the path part of the shebang, e.g./bin/bash/]: bad interpreter: not a directory

컴퓨터를 한두 번 재부팅하고 chmod +x" chmod 700ls -l"을 확인하면 Ubuntu Mate의 작업 버전과 동일한 권한이 표시됩니다.

스크립트 이름을 지정하는 script1.sh것뿐만 아니라 이름도 지정 하려고 시도 script1했지만 결과가 없습니다. (이 합계의 역할이나 프로세스가 무엇인지 모르겠습니다 )./.script1/.script1.sh/.sh

스크립트 파일을 다음 위치에 배치했습니다.

/usr/local/bin(기억에서 만들어야 할 것 같아요)

~/Desktop그냥 가서 봐

~/bin(진짜 이걸 만들어야 했어)

일부 포럼에서 $PATH재부팅에 대한 이야기가 있어서 몇 번 재부팅했습니다(하지만 이해가 되지 않았습니다 $PATH).

이것오직(부분) shebang을 제거하고 스크립트를 ~/bin.

두 가지 질문:

  1. 왜 그런지 이해가 안 돼요. Ubuntu Mate가 소유한 Lubuntu Minimal에는 어떤 주요 기능이 빠져 있습니까? "/bin/bash" 디렉토리를 생성하면 bash가 마술처럼 해당 경로를 찾아서 아무 작업도 수행하지 않습니까, 아니면 손상시키게 됩니까?

  2. 결국 런처에서 실행하고 싶지만 .desktop초기 실험은 실패했습니다. Exec=script1데스크톱 항목에서 사용하면 터미널 창이 즉시 깜박인 다음 닫힙니다. 이전에 Lubuntu에서 사용한 적이 있지만 bash -c "cmd1 && cmd2 &&..."bash는 여기서 오류를 발생시킵니다. 직관적으로 이것은 Shebang에서 "bash"를 제거했기 때문이라고 생각합니다. 그러나 위의 질문 1을 참조하십시오.

지금 내 마음은 너무 혼란스러워서 이것을 이해하기 위해 어디서부터 읽어야 할지 모르겠습니다. 당신의 지혜는 높이 평가될 것입니다.

미리 감사드립니다

원본 테스트 스크립트(Ubuntu Mate용):

#!/bin/bash

#host to block
echo -e "enter domain to block:"
read host_name  
host_entry="127.0.1.1\t$host_name"
echo -e $host_entry >>/home/user/Desktop/host-edits-test
echo "***done and gone***" 
sleep 2
exit 0

답변1

의견에서 이미 지적했듯이 동시에 여러 가지 문제에 직면한 것 같습니다.

  1. 올바른 shebang 구문은 이지만 #!이는 스크립트가 아닌 귀하의 질문에 오타가 있는 것 같습니다.
  2. 마지막 슬래시는 디렉터리를 의미하므로 메시지가 표시됩니다.

    잘못된 통역사: 디렉토리가 아닙니다.

  3. Ubuntu의 모든 변형은 기본 셸을 사용하므로 수동으로 설치 dash해야 할 수도 있습니다 .bash

bash귀하의 "원본 테스트 스크립트"는 지금까지 올바른 것으로 보입니다. 설치되었는지 확인하면 문제가 없을 것입니다.

또는 스크립트에서 bashism을 사용하지 않는 경우 /bin/sh일반적으로 현재 시스템 쉘을 가리키는 링크로 shebang을 변경하십시오. 이 경우 dash이것이 가장 이식 가능한 솔루션입니다.

https://askubuntu.com/questions/141928/what-is-difference- Between-bin-sh-and-bin-bash

편집하다

여러 문제를 병렬로 해결하려고 시도하고 질문 내에서 여러 문제를 혼동하는 것 같습니다. 그래서 질문이 차례로 나왔습니다.

  1. 패키지가 설치되어 있는지 확인하십시오 bash.
  2. /bin/bash실제로 실행 가능한 바이너리인지 확인하세요 .
  3. /bin/bash사용자로 호출하여 유효한 명령줄을 얻을 수 있는지 확인하세요 .
  4. 몇 가지만으로 Shebang을 실행할 수 있는지 확인하십시오 echo.

지금까지 모든 것이 제대로 작동했다면 시스템 설정이나 바이너리가 아닌 실제 스크립트에 문제가 있을 가능성이 높습니다 bash. 문제가 발생하면 질문을 업데이트하세요.정확한 설명출력하고 지금은 나머지를 건너뜁니다. 아니면 더 나은 방법은새 질문 만들기, 이미 혼란스럽기 때문입니다.

관련 정보