#!/bin/bash
#
echo $PWD
cd /home/<my username>/<long path>
echo $PWD
그것을 실행할 때 얻는 것 bash script.sh
:
/home/<my username>
: No such file or directorye/<my username>/<long path>
/home/<my username>
또는bash . script.sh
.: .: is a directory
/hom
첫 번째 경우 아무 이유 없이 주소 줄( )의 처음 4자를 건너뛰는 것처럼 보입니다 . 두 번째 경우에는 정확히 무엇입니까 .: .:
? 이는 확실히 'Google에서 사용할 수 없습니다'.
이 줄을 터미널에 복사하여 붙여 넣으면 cd /home/<my username>/<long path>
ofc가 정상적으로 작동합니다.
편집: 경로 끝에 공백 기호가 누락된 것에 관한 것입니다. 감사합니다.
답변1
당신은해야
스크립트의 "/home" 부분 앞에 "숨겨진 문자"가 있는지 확인하십시오(이것은 CD로 이동할 수 없는 이유와 디스플레이에서 일부가 잘리는 이유를 설명합니다). 예: cat -ve THEFILE #
-e
와이어의 각 끝 부분에는 다음과 같은 표시가 표시됩니다.$
그리고-v
양식에 일부 제어 문자가 표시됩니다.^x
, 전임자:^M
제어 문자 "Enter".수정: 이렇게 하려면 작동하는 예제를 셸에 입력한 다음 마우스를 사용하여 복사하고, 스크립트를 편집하고, 줄을 삭제하고, 복사한 내용을 해당 위치에 붙여넣습니다. (vi에서: 스크립트가 설명과 정확히 같고 오류 행이 4행인 경우: 다음을 사용하여 4행으로 이동할 수 있습니다.
4G
을 누른 다음 해당 줄을 삭제하세요.dd
를 누른 다음 위 줄에 삽입 모드를 입력합니다.O
(대문자 o). 그런 다음 마우스로 복사한 줄을 붙여넣을 수 있습니다. 그 다음에Escape
명령 모드로 돌아가서:wq
파일에 변경 사항을 쓰고 vi를 종료합니다.$(pwd) 출력을 $PWD 값과 비교할 수 있습니다. 다음을 바꿔보세요.
echo $PWD
그리고:pwd ; echo "PWD=$PWD"
마침내:
bash . script.sh
해야 한다:bash ./script.sh
. 입력한 명령을 실행하려면 bash가 "."를 실행해야 합니다. "script.sh" 및 "." 인수를 디렉토리로 사용하면 bash가 불평했습니다. 이러한 방식으로 접수된 불만사항은 일반적으로 다음과 같은 형식을 취합니다program_name: some message
. 여기서 bash는 프로그램을 실행하려고 하므로.
오류 메시지가.:
프로그램 이름 힌트로 잘못 사용되었으며 표시된 메시지는.: is a directory
프로그램을 실행할 수 없다는 것과 그 이유가 무엇인지입니다(bash 스크립트가 아닌 디렉토리입니다).이런 방식으로 script.sh를 호출하면(bash ./script.sh) 현재 셸에
bash
실행 및 종료할script.sh
하위 셸을 호출하도록 요청하는 것입니다. bash 하위 쉘만 PWD를 에코한 다음 디렉토리로 cd하고 새 PWD를 에코합니다. Bash가 종료되면 현재 쉘은 원래 디렉토리에 남아 있습니다. 현재 쉘에서 파일을 변경하려면 다음을 대신 사용하십시오:. ./script.sh
또는 bash에서 가능합니다source ./script.sh
(참고:.
이는 파일을 가져오는 보다 이식 가능한 방법입니다)(참고 2: 파일 소스가 있습니다. 경로를 권장합니다. 최신 셸에서, 즉:. script.sh
가능하지만 다음과 같이 로컬 경로를 지정하는 것이 좋습니다. ./script.sh
.
답변2
두 번째 질문은 간단합니다.
.: .: is a directory
Bash 스크립트를 실행했는데 Bash에서 오류가 발생하면 다음과 같이 스크립트 이름과 오류가 발견된 줄이 인쇄됩니다.
script.sh: line X: some message
명령줄이 bash . something.sh
스크립트로 실행을 시도 .
하므로 실패합니다. 아마도 당신은 찾고 있습니까 bash ./script.sh
? 이 경우 전체 경로를 지정할 필요가 없습니다. 이렇게 하면 Bash는 스크립트를 찾을 것입니다 bash script.sh
.
스크립트 출력이 약간 이상합니다.
: No such file or directorye/<my username>/<long path>
파일 정보와 일부 오류 메시지가 누락되었습니다.
귀하의 스크립트에 예상치 못한 인쇄할 수 없는 문자가 있는 것 같습니다. CR-LF 줄 종결자를 사용하는 편집기에서 작성한 경우 fromdos -b script.sh
이 -b
플래그를 사용하면 fromdos
원본 파일의 백업이 남겨집니다. Debian을 사용하는 경우 패키지를 사용하여 이 프로그램을 설치할 수 있습니다 tofrodos
.
예기치 않은 인쇄할 수 없는 문자가 없는지 확인하려면 를 사용하십시오 cat -A
. 흥미로운 일이 일어날 수도 있습니다. 예를 들어, 탭 문자는 로 인쇄되고 ^I
개행 문자는 로 인쇄됩니다 $
. 파일에 MS-DOS 스타일 줄 바꿈이 있는 경우 로 표시됩니다 ^M$
.
답변3
다음 명령을 실행하고 다시 실행할 수 있습니까?
dos2unixscript.sh
그래도 문제가 해결되지 않으면 다음 명령을 사용하여 파일에서 인쇄할 수 없는 문자를 제거하세요.
tr -cd "[:print:]" script.sh > script2.sh bash script2.sh