shopt은 스크립트에서 실행될 때 찾을 수없는 명령 행에서 작동합니다.


13

나는 주변에 일부 파일을 복사하는 스크립트를 작성하고 사용하기 위해 노력하고있어 shopt -s dotglob dotfiles 복사 CP 있도록 같은 .jshint과 이것 저것.

shopt -s dotglob오류없이 bash 프롬프트에서 직접 실행할 수 있습니다 . 그러나 스크립트를 실행하면 오류가 발생합니다.

script.sh: 81: script.sh: shopt: not found

shebang header와 함께 bash shell 에서이 스크립트를 실행하고 있습니다 #!/usr/bin/env bash. 오류 라인 :

shopt -s dotglob
cp -r $TEMP/img/* $TARGET/img/
cp -r $TEMP/js/* $TARGET/js/
cp -r $TEMP/less/* $TARGET/less/

Google에서 도움이되는 것을 찾지 못했습니다. 문제가 무엇인지 아십니까?


상기시켜 주셔서 감사합니다. 가능한 모든 답변을 선택했습니다. 이 질문 외에는 아직 좋은 답변이없는 질문이 하나 있습니다.
— Kurtosis

3
더 간단한 #!/bin/bash헤더로 사용해보십시오 .
— ISH

그리고 어떤 우분투 버전?
— ISH

2
@izx, 정답입니다, shopt, 떠들썩한 파티 내장입니다 sh없는 shopt, 그리고에서 오류 메시지 같은 오류 메시지 외모 dash. 아마도 여기의 오류는 sh(우분투에서는 dash기본적으로) bash 스크립트를 실행 중 입니다. sh에 대한 심볼릭 링크 인 경우에도 bashbash 스크립트 sh를 실행하는 것은 bash.
— geirha

답변:


23

주석에서 답변을 작성하려면 다음을 수행하십시오.

습관을 잃은 많은 사람들이 sh대신에 스크립트를 실행합니다 bash. 이식성이 문제가되는 경우이 방법을 사용하는 것이 좋지만, 많은 사람들은 자신이 본 내용을 이해하지 않고 복사하기 때문에 그렇게합니다.

스크립트를 데스크톱이 아닌 Linux 시스템에서 실행해야하는 경우가 아니면 (예 : Android 장치에서 셸 스크립트를 실행하는 것과는 상당히 다름) 시작 부분에 Bash shebang 행을 사용하는 것이 좋습니다.

#!/bin/bash

이 행은 스크립트의 첫 번째 행일 때이를 실행하기 위해 호출 할 인터프리터 (bash 또는 sh, Python 등)를 판별합니다. 위의 행을 사용하면 기본 셸을 사용한다고 가정 할 때 명령 행에서와 거의 동일한 동작이 발생합니다. 이식성 또는 환경 설정의 이유로 다른 shebang 라인을 사용하는 경우 참조하는 쉘이 Bash의 심볼릭 링크 인 경우에도 참조한 쉘의 문서를 참조 해야 합니다.


5
시스템을 완전히 교차시키기 위해서는 #!/usr/bin/env bash 어떤 bash를 사용해야 하는지를 아는 것이 env의 일이기 때문에 선호 합니다 (예를 들어 패치 한 경우).
— shrikeh

-1

다음과 같이 zsh를 종료하고 bash를 활성화해야합니다.

exec bash

명령을 실행

source ~/.bashrc

그런 다음 zsh를 반응시킬 수 있습니다.

exec zsh

희망이 도움이


흠. 1) OP가 zsh를 사용하고 있다고 생각하지 않습니다. 2) ~/.basrc이 경우 시작시 bash가 AFAIK 를 실행하므로 명시 적으로 호출 할 필요가 없습니다. 3) OP의 명령은 어디에서 실행됩니까? 4) exec두 번 사용하면 초기 zsh 셸에서 수행 한 환경 변경 사항이 손실됩니다. bash를 호출하면 발생하지 않습니다.
— xenoid

필자의 경우 환경 변경 사항을 가져와야 변경 사항이 유지되었습니다. 방금 컴퓨터를 다시 시작했는데 모든 변경 사항이 유지됩니다. 어쩌면 내가 설정 생각하려고했다 아나콘다 단지 특정
— 데이비드 Kabii
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.