sh: 0: getcwd () не удалось: нет такого файла или каталога

11

Я пытаюсь скомпилировать код ARM в Ubuntu 12.04.

Все работает нормально, когда я помещаю свой код в локальную директорию. Но когда я помещаю код в процитированный каталог монтирования, эта ошибка происходит:

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

Я использую Ubuntu 12.04 64bit

Что может вызвать эту ошибку?

dongjiawei
источник
1
Ваш рабочий каталог больше не существует. Введите cd [PATH]вашу оболочку, чтобы перейти к существующей.
Дэвид Фёрстер
также см. здесь: stackoverflow.com/a/21593371/7111561
derHugo

Ответы:

7

Я получил эту ошибку, используя jshint через подпроцесс python на Ubuntu 12.10 64 бит.

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, перейдите в него, создайте файл с именемmyjavascript.js

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

Jshint работает правильно, он говорит, что нет ошибок, которые являются правильными.

Откройте 2-й терминал и 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 ..пока не перестанете получать ошибки. Это повторно синхронизирует терминал с файловой системой. Затем перейдите в ваш каталог. Попробуйте еще раз. Ошибка уходит.

  2. Используйте su youruserв терминале, введите пароль. Он обновляет и возвращает вас в тот же каталог.

  3. Закройте и снова откройте терминал, который удаляет устаревшие подписи каталога. Или отправьте настойчивое сообщение какой-либо программе (jshint) или тысячам других программ, которые не могут переносить устаревшие подписи каталогов или восстанавливать их.

Эрик Лещинский
источник
вместо того, чтобы запускать cd ..«достаточно часто», вы также можете просто cd ~перейти прямо в свою домашнюю папку
derHugo
4

Я получаю ту же ошибку, но я пытался запустить скрипт в моем домашнем каталоге. Я решил это с:

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

Это переместит меня в мой домашний каталог, затем запустит pwd (но вы можете запустить все что угодно), а затем popd вернет меня туда, где я был. Если вам не нужно двигаться назад, то

cd; pwd

Было бы достаточно, чтобы решить мою проблему, (я надеюсь, что это поможет с вашей.)

править Эти 1>/dev/nullчасти не являются обязательными; Я добавляю их, чтобы использовать вышеуказанную строку в сценарии оболочки без дополнительного вывода, которое в этом случае не требуется.

Алекс Рош
источник
Так что я могу вставить это в скрипт bash и не получить вывод, который мне не нужен. Я пытаюсь добавить как можно более полный ответ, потому что, когда я нахожу командную строку-фу, мне легко сократить ее до моих потребностей, и я ожидаю, что любой, кто использует это, будет немного похож на меня.
Алекс Рош
Хорошо, я добавил объяснение редактирования, (хотя некоторые могут подумать, что я учу их сосать яйца - те, кто знает, не нуждаются в редактировании, а те, кто не знает, могут вырезать или вставить, или посмотреть, что функция, которая не имеет прямого отношения к первоначальному вопросу.)
Alexx Roche
К сожалению, это так :(
Брайам
-1

Даже у меня была такая же проблема с python virtualenv. Это было исправлено простым перезапуском

sudo shutdown -r now
Юнуса
источник
2
Я не думаю, что вам нужно будет перезагрузить, чтобы исправить это, просто следуйте другим ответам здесь, и cdв существующий каталог.
wjandrea
Если у вас есть новый вопрос, задайте его, нажав кнопку « Задать вопрос» . Включите ссылку на этот вопрос, если это помогает обеспечить контекст. - Из Обзора
N0rbert
1
@ N0rbert Это не новый вопрос, это, очевидно, попытка ответить и предоставить ИМХО правильное (хотя, безусловно, не оптимальное) решение.
Byte Commander
@ByteCommander Я нажал на это по ошибке, извините.
Норберт