sh: 0: getcwd () falhou: esse arquivo ou diretório não existe

11

Estou tentando compilar código ARM no Ubuntu 12.04.

Tudo está funcionando bem quando eu coloco meu código no diretório local. Mas quando eu coloco o código no diretório de montagem citado, esse erro acontece:

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

Aqui está o meu comando mount:

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

Estou usando o Ubuntu 12.04 64bit

O que causaria esse erro?

dongjiawei
fonte
1
Seu diretório de trabalho não existe mais. Digite cd [PATH]seu shell para ir para um existente.
David Foerster
Veja também aqui: stackoverflow.com/a/21593371/7111561
derHugo 14/06

Respostas:

7

Eu recebi esse erro usando o jshint através de um subprocesso python no Ubuntu 12.10 de 64 bits.

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

Isso é causado porque você excluiu ou moveu um diretório para fora dele e o diretório atual não pode ser determinado.

Como saber se você está tendo esse problema:

Execute o comando cd . (se você receber esse erro, terá esse problema).

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

Você tentou alterar o diretório para o diretório atual e não conseguiu.

Como reproduzir o erro:

O jshint é afetado por este erro. Crie um diretório foo, faça um cd nele, crie um arquivo chamadomyjavascript.js

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

O jshint roda corretamente, diz que não há erros, o que está correto.

Abra um segundo terminal e rm -rfo diretório /home/el/foopor baixo.

rm -rf /home/el/foo

Execute jshint myjavascript.jsnovamente o seu primeiro terminal e você receberá um erro:

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

O diretório se foi! E mesmo que você o substitua pelo mesmo conteúdo, ele possui uma assinatura diferente e o terminal não pode se recuperar, o método getcwdnão pode saber qual é o diretório atual.

Três soluções:

O terminal está confuso sobre qual é o diretório atual porque se foi ou sua assinatura mudou. Siga um destes procedimentos para corrigi-lo:

  1. Execute o comando cd ..até parar de receber erros. Isso re-sincroniza o terminal com o sistema de arquivos. Em seguida, volte ao seu diretório. Tente novamente. O erro desaparece.

  2. Use su youruserno terminal, digite a senha. Ele é atualizado e traz você de volta ao mesmo diretório.

  3. Feche e reabra o terminal que limpa as assinaturas de diretório obsoletas. Ou envie um e-mail desagradável para qualquer programa (jshint) ou para milhares de outros programas que não podem tolerar ou se recuperar de assinaturas antigas de diretório.

Eric Leschinski
fonte
em vez de correr cd .."com bastante frequência", você também pode apenas cd ~diretamente para o seu homefolder
derHugo
4

Eu recebo o mesmo erro, mas estava tentando executar um script no meu diretório pessoal. Eu o resolvi com:

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

Isso move o meu para o meu diretório pessoal, depois executa o pwd (mas você pode executar o que quiser) e o popd me move de volta para onde eu estava. Se você não precisar voltar,

cd; pwd

Seria o suficiente para resolver meu problema (espero que ajude com o seu).

editar As 1>/dev/nullpeças são opcionais; Eu os adiciono para que eu possa usar a linha acima em um script de shell sem saída adicional que não seja necessária neste caso.

Alexx Roche
fonte
Para que eu possa colar isso em um script bash e não terminar com uma saída que não quero. Tento adicionar uma resposta o mais completa possível, porque, quando encontro o commandline-fu, acho fácil reduzi-lo às minhas necessidades e espero que qualquer pessoa que o use seja um pouco como eu.
Alexx Roche 6/09/2013
ok, eu adicionei uma edição explicando, (embora alguns possam achar que estou ensinando a chupar ovos - aqueles que sabem que não precisam da edição e aqueles que não sabem podem cortar e colar, ou procurar isso função que não está directamente relacionada com a pergunta original).
Alexx Roche
Infelizmente é assim :(
Braiam
-1

Mesmo eu estava tendo o mesmo problema com python virtualenv. Foi corrigido por um simples reinício

sudo shutdown -r now
yunus
fonte
2
Eu não acho que você precisaria reiniciar para corrigi-lo, basta seguir as outras respostas aqui e cdem um diretório existente.
Wjandrea
Se você tiver uma nova pergunta, faça-o clicando no botão Fazer pergunta . Inclua um link para esta pergunta se ela ajudar a fornecer contexto. - Do comentário
N0rbert
1
@ N0rbert Esta não é uma pergunta nova, é claramente uma tentativa de responder e fornecer uma solução válida (embora certamente não ótima) do IMHO.
Byte Commander
@ByteCommander Cliquei nisso por engano, me desculpe.
N0rbert