2013-10-22 2 views
1

실패한 메모리를 아주 작은 쉘 스크립트로 바꾸고 싶습니다.이 스크립트는 현재 디렉토리에서 작동하지만 경로에 배치되면 실패합니다.

#!/bin/sh 
if ! [ –a $1.sav ]; then 
    mv $1 $1.sav 
    cp $1.sav $1 
fi 
nano $1 

은 원본 버전의 스크립트를 저장하기위한 것입니다. 이전에 원본이 보존 되었다면 이동 및 복사 백을 건너 뜁니다 (원래의 타임 스탬프를 보존하기 위해 이동 및 복사 백을 사용합니다).

chmod과 함께 실행 파일을 만들면 내가 편집중인 디렉토리에서 실행할 수 있습니다.

*-bash: /usr/bin/safe.sh: /bin/sh: bad interpreter: Text file busy* 

내 질문 : 나는 /usr/bin로 이동 한 후 내가 (선두 ./없이) 다른 디렉토리에 실행하려고하지만

./safe.sh filename 

, 그것은 실패로 내가이 스크립트를 경로 (echo $PATH에 의해 검증 됨)로 옮기면 왜 실패하나요?

D' oh? 탐구하는 마음은이 일을하는 법을 알고 싶어합니다.

+0

어떻게 실행 했습니까? 또한 실행 파일로 표시 했습니까? – sidyll

+1

음,/사용자/bin에이 경로에 그래서 난 그냥 네, 실행 파일로 표시하는 + X safe.sh chmod를 않았다 safe.sh 파일 이름 입력합니다. – K7AAY

답변

3

보통 . 명령은 독립 실행 형 스크립트를 실행하는 데 일반적으로 사용되지 않으므로 혼란 스러울 수 있습니다. .은 대화 형으로 사용되어 환경에 새 바인딩을 추가하는 데 사용됩니다 (예 : 셸 함수 정의). 또한 스크립트 내에서 유사한 효과 (예 : 스크립트 "라이브러리"로드)에도 사용됩니다.

질문에 대한 설명에 따라 스크립트 실행 파일을 표시하면 현재 디렉토리 (예 : ./safe.sh filename) 또는 경로에있는 모든 위치 (예 : safe.sh filename)에서 똑같이 잘 실행할 수 있어야합니다.

명령 이름의 일반적인 규칙에 맞게 이름에서 .sh을 제거 할 수 있습니다.

동의어 : 나는 실수로 스크립트에서 If을 사용합니다.

+1

요점은 다음과 같습니다. 의미가 매우 다르므로 '.'를 사용하여 명령 스크립트를 실행 해보는 것은 좋지 않은 생각입니다. – danfuzz

+1

오타를 지적 해 주셔서 감사합니다. 가상 KVM-over-IP 장비를 사용하여 Linux와 The Unspeakable OS간에 정신 장치를 옮겨야합니다. 필자는 Linux 시스템에서이를 붙여 넣었을 때 잡았지만 웹에 도달하려면 The Unspeakable을 사용해야합니다. – K7AAY

+1

현재 디렉토리에서'.'없이 작동합니까? – danfuzz

1

스크립트가 쓰기 용으로 열려 있으면 오류 bad interpreter: Text file busy이 발생합니다 (this SE questionthis SF question 참조). 실행을 시도 할 때 편집기 (예 : 편집기)가 열려 있지 않은지 확인하십시오.

관련 문제