Linux 시스템의 폴더에 CD를 넣을 수 없습니다. 파일/폴더가 존재하지 않는다고 뜹니다

Linux 시스템의 폴더에 CD를 넣을 수 없습니다. 파일/폴더가 존재하지 않는다고 뜹니다

폴더에 CD를 넣고 목록을 작성하기 위해 테스트 ksh 파일을 작성했습니다. 다음과 같이 쓰여 있습니다:

`cd "their_file/"`;

`pwd`;

`ls -l`;

다음과 같은 결과가 나타납니다.

./test.ksh: line 2: /home/user/final: Is a directory

./test.ksh: line 3: total: command not found

내 비밀번호는 다음과 같습니다.

/홈/사용자/최종

이 문제를 어떻게 해결합니까? 나는 그것이 cd 문을 실행하고 그 문에서 종료되는 것 같아요. 나는 Fedora 컴퓨터를 사용하고 있습니다.

답변1

스크립트의 각 명령 주위에 백틱이 있으면 셸이 명령의 출력을 가져와서 실행합니다.저것명령으로.

명령 주위에 백틱을 사용하는 것은 명령을 안에 넣는 것과 같습니다 $( ... )(이것은 명령의 출력을 캡처하는 데 선호되는 구문입니다).

오류 메시지는 의 결과를 명령으로 실행하려고 할 /home/user/final: Is a directory때 발생하며 마찬가지로 의 결과를 실행하려고 할 때 발생합니다 .kshpwdtotal: command not foundls -l

백틱을 제거합니다. 세미콜론( ;)도 제거하세요. 같은 줄에 두 개의 명령을 넣으려는 경우에만 필요합니다.

cd dir; pwd

스크립트는 다음과 같아야 합니다.

#!/bin/sh

cd "their_file"
pwd
ls -l

이 작업은 계속 실행되며 pwd실패 ls -l하더라도 실행됩니다 cd. 실패할 경우 스크립트를 종료하려면 다음을 수행하십시오 cd.

#!/bin/sh

cd "their_file" || exit 1
pwd
ls -l

cd이는 0이 아닌 값을 반환 한다는 사실을 사용합니다.종료 상태실패하면. ( ||논리적또는) 앞에는 "false"(셸 스크립트에서 0이 아닌 종료 상태를 의미함)를 반환하는 경우 exit 1스크립트가 계속해서 명령문을 실행한다는 의미입니다 .exitcd


당신이 얻는 이유 /home/user/final: Is a directory~ 아니다 /home/user/final/their_file: Is a directorycd는 다음과 같은 방식으로 실행되기 때문입니다.서브쉘(백틱이나 안에 넣으면 이런 일이 발생합니다 $( ... )). 하위 셸에서 실행되므로 작업 디렉터리의 실제 변경 사항은 상위 셸(스크립트)에 반영되지 않습니다.

같은 이유로 스크립트 실행이 완료되면 디렉터리가 아닌 스크립트를 호출했을 때와 동일한 디렉터리에 계속 있게 됩니다 their_file.

이 특정 사항에 대한 자세한 내용은 "스크립트의 CD 기능이 작동하지 않는 이유" 그리고 "현재 디렉토리를 변경하는 스크립트(cd, pwd)" (및 기타 유사한 질문).

관련 정보