간단한 작은 "cd"는 스크립트에서 작동하지 않습니다.

간단한 작은 "cd"는 스크립트에서 작동하지 않습니다.
#!/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

관련 정보