sh : 0 : getcwd () 실패 : 해당 파일 또는 디렉토리가 없음 넣으면이 오류가 발생합니다. sh: 0: getcwd() failed:

Ubuntu 12.04에서 ARM 코드를 컴파일하려고합니다.

코드를 로컬 디렉토리에 넣으면 모든 것이 잘 작동합니다. 그러나 인용 마운트 디렉토리에 코드를 넣으면이 오류가 발생합니다.

sh: 0: getcwd() failed: No such file or directory
sh: 0: getcwd() failed: No such file or directory

내 마운트 명령은 다음과 같습니다.

sudo mount -t cifs -o username=wx,passwd=wx,auto,nounix,noserverino,file_mode=0777,dir_mode=0777,uid=user,gid=users,noperm,rw,uid=1002,gid=1002 //192.165.54.18/prj_9330  /home/dongjw/work_dir/work_9330

우분투 12.04 64 비트를 사용하고 있습니다

이 오류의 원인은 무엇입니까?



답변

우분투 12.10 64 비트에서 파이썬 서브 프로세스를 통해 jshint를 사용 하여이 오류가 발생했습니다.

node.js:464
var cwd = process.cwd();
                  ^
Error: ENOENT, no such file or directory
    at Function.resolveArgv0 (node.js:464:23)
    at startup (node.js:51:13)
    at node.js:555:3

디렉토리를 삭제하거나 그 아래에서 디렉토리를 이동했으며 현재 디렉토리를 판별 할 수 없기 때문에 발생합니다.

이 문제가 있는지 확인하는 방법 :

명령을 실행하십시오 cd . (이 오류가 발생하면이 문제점이있는 것입니다).

el@apollo:~/foo$ cd .
cd: error retrieving current directory: getcwd: cannot access parent
directories: No such file or director

디렉토리를 현재 디렉토리로 변경하려고 시도했지만 실패했습니다.

오류를 재현하는 방법 :

jshint는이 오류의 영향을받습니다. 디렉토리를 만들고 foo, CD를 넣고,myjavascript.js

cd /home/el
mkdir foo
cd foo
touch myjavascript.js
jshint myjavascript.js

jshint가 올바르게 실행되면 오류가 없다고 말합니다.

두 번째 터미널을 열고 rm -rf디렉토리 /home/el/foo를 아래에서 엽니 다 .

rm -rf /home/el/foo

jshint myjavascript.js첫 번째 터미널에서 다시 실행하면 오류가 발생합니다.

el@apollo:~/foo$ jshint myjavascript.js

    node.js:464
        var cwd = process.cwd();
                      ^
    Error: ENOENT, no such file or directory
        at Function.resolveArgv0 (node.js:464:23)
        at startup (node.js:51:13)
        at node.js:555:3

디렉토리가 사라졌습니다! 그리고 동일한 내용으로 바꾸더라도 서명이 다르고 터미널을 복구 getcwd할 수 없으므로 메소드 는 현재 디렉토리가 무엇인지 알 수 없습니다.

세 가지 솔루션 :

터미널은 현재 디렉토리가 사라 졌거나 서명이 변경되어 현재 디렉토리가 무엇인지 혼동합니다. 다음 중 하나를 수행하여 수정하십시오.

  1. cd ..오류가 발생하지 않을 때까지 명령을 실행하십시오 . 이것은 터미널을 파일 시스템과 다시 동기화합니다. 그런 다음 디렉토리로 다시 cd하십시오. 다시 시도하십시오. 오류가 사라집니다.

  2. 사용 su youruser단말기에서이 암호를 입력합니다. 새로 고침되어 같은 디렉토리로 돌아갑니다.

  3. 오래된 디렉토리 서명을 플러시하는 터미널을 닫았다가 다시 엽니 다. 또는 오래된 디렉토리 서명을 허용하거나 복구 할 수없는 모든 프로그램 (jshint) 또는 수천 개의 다른 프로그램에 nastymail을 보내십시오.


답변

같은 오류가 발생하지만 홈 디렉토리에서 스크립트를 실행하려고했습니다. 나는 그것을 해결했다 :

pushd ~ 1>/dev/null; pwd ; popd 1>/dev/null

이것은 내 홈 디렉토리로 이동 한 다음 pwd를 실행하지만 원하는대로 실행할 수 있습니다. 팝은 나를 원래 위치로 다시 이동시킵니다. 뒤로 이동할 필요가 없다면

cd; pwd

내 문제를 해결하기에 충분할 것입니다 (문제가 도움이되기를 바랍니다).

편집
1>/dev/null부분은 선택 사항입니다 필자는이 경우 필요하지 않은 추가 출력없이 쉘 스크립트 내에서 위의 행을 사용할 수 있도록 추가합니다.


답변

심지어 python virtualenv와 동일한 문제가있었습니다. 간단한 재시작으로 수정되었습니다.

sudo shutdown -r now


답변