sh: 0: getcwd() 失败:没有那个文件或目录

don*_*wei 12 mount

我正在尝试在 Ubuntu 12.04 中编译 ARM 代码。

当我将代码放在本地目录中时,一切正常。但是当我将代码放在引用的挂载目录中时,会发生此错误:

sh: 0: getcwd() failed: No such file or directory
sh: 0: getcwd() failed: No such file or directory
Run Code Online (Sandbox Code Playgroud)

这是我的挂载命令:

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
Run Code Online (Sandbox Code Playgroud)

我正在使用 Ubuntu 12.04 64 位

什么会导致这个错误?

Eri*_*ski 7

我通过 Ubuntu 12.10 64 位上的 python 子进程使用 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
Run Code Online (Sandbox Code Playgroud)

这是因为您删除或从其下移出目录而无法确定当前目录。

如何判断您是否遇到此问题:

运行命令cd . (如果出现此错误,则说明有此问题)。

el@apollo:~/foo$ cd .
cd: error retrieving current directory: getcwd: cannot access parent 
directories: No such file or director
Run Code Online (Sandbox Code Playgroud)

您试图将目录更改为当前目录,但没有成功。

如何重现错误:

jshint 受此错误影响。创建一个目录foo,cd 到其中,创建一个名为的文件myjavascript.js

cd /home/el
mkdir foo
cd foo
touch myjavascript.js
jshint myjavascript.js
Run Code Online (Sandbox Code Playgroud)

jshint 运行正常,它说没有正确的错误。

打开第二个终端,从下面打开rm -rf目录/home/el/foo

rm -rf /home/el/foo
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

目录不见了!而且即使你用相同的内容替换它,它具有不同的签名并且终端无法恢复,该方法getcwd无法知道当前目录是什么。

三种解决方案:

终端对当前目录是什么感到困惑,因为它已经消失或者它的签名已经改变。执行以下操作之一来修复它:

  1. 运行该命令,cd ..直到您不再收到错误为止。这将终端与文件系统重新同步。然后 cd 回到你的目录。再试一次。错误消失了。

  2. su youruser在终端中使用,输入密码。它会刷新并将您带回同一目录。

  3. 关闭并重新打开终端以清除陈旧的目录签名。或者向任何程序 (jshint) 或无法容忍或从陈旧目录签名中恢复的数千个其他程序发送讨厌的邮件。


小智 5

我遇到了同样的错误,但我试图在我的主目录中运行脚本。我用以下方法解决了它:

pushd ~ 1>/dev/null; pwd ; popd 1>/dev/null
Run Code Online (Sandbox Code Playgroud)

这将移动到我的主目录,然后运行pwd(但您可以运行您喜欢的任何内容),然后将popd我移回到原来的位置。如果您不需要返回,那么:

cd; pwd
Run Code Online (Sandbox Code Playgroud)

就足以解决我的问题了。

这些1>/dev/null部件是可选的。我添加它们是为了可以在 shell 脚本中使用上面的行,而无需在本例中不需要额外的输出。