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.