Как мне запустить виртуальную машину на конкретный XServer?

Повторение описания некоторой личной интерпретации документации POSIX не поможет OP. Есть еще несколько вопросов, которые подробно объясняют POSIX. И все же этот вопрос.


Некоторые основные описания:
A . Известно, что Linux / Unix может стереть файл (каталог) во время его использования. Вот почему вы могли продолжать смотреть фильм после того, как стерли его. Только когда inode записи каталога удаляется, файл действительно исчезает.

В . Также бывает, что оболочка сохраняет внутреннее значение для фактического pwd, даже если значение переменной окружения $ PWD изменяется.

Первый комментарий к принятому ответу @yaegashi показывает, где искать (источник pwd):

Я прав. См. источник pwd_builtin () . Он просто печатает содержимое the_current_working_directory. - yaegashi 31 июля, 16:01

Как показано, оболочка по-прежнему сохраняет информацию о правильном значении pwd ("/ home / user"), даже начиная с нечетного значения PWD.

С . Должно быть легко понять, что значение, хранимое оболочкой, может в некоторых случаях не синхронизироваться с реальностью.

Делаем компакт-диск. внутри удаленного каталога, похоже, является одним из тех краевых случаев. Также кажется, что оболочка добавляет точку к последнему известному pwd при ошибке.


Ваши вопросы:

1 . Удалите каталог для PWD и выполните встроенный pwd.

$ pwd
/tmp/hello
$ rmdir $PWD;   pwd
/tmp/hello

Встроенный pwd сообщает значение pwd, которое оболочка сохраняет в памяти.
Внешний / bin / pwd сообщит об ошибке.
Интересно сообщить, что pwd -P (даже если он является встроенным для Bash) сообщит об ошибке:

$ pwd -P
pwd: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory

И после использования встроенной pwd -P нормальный pwd также не работает. Я считаю, что это потому, что значение pwd в памяти обновляется.

2. cd $ PWD

Затем я попытался перейти в сам каталог, и, конечно же, это было невозможно (хотя я уже был там):

  $ cd $ PWD 
bash: cd: / tmp / hello: такого файла или каталога нет 
 

Любая реальная попытка проследовать по пути к каталогу потерпит неудачу в момент, когда каталог не может быть прочитан (например, когда он не существует).

3. компакт-диск.

Но потом я попробовал с cd. , поскольку предполагается, что это то же самое, что и cd $ PWD. И это сработало ... каким-то образом:

  $ cd. 
cd: ошибка при получении текущего каталога: getcwd: невозможно получить доступ к родительским каталогам: нет такого файла или каталога 
 

Оболочка пытается получить доступ к пути, который, как он знает, является pwd, и он не работает. И это то, что сообщает оболочка, сбой! Здесь нет проблем.

4. Новый путь.

К моему удивлению, теперь у меня появилось новое "кое-что":

 $ pwd 
 / tmp / hello /. 
 

Вылетело значение в памяти для PWD - синхронизации с реальностью, и к нему была добавлена ​​точка (.). Как любое повторное использование cd. добавит точку.

$ cd .; pwd
/tmp/hello/./.

И совершенно неожиданно, cd .. сделает pwd и $ PWD только .. .

$ cd ..; pwd; echo $PWD
..
..
$ cd ..; pwd; echo $PWD
../..
../..

5. Предыдущий PWD.

И если я попытался перейти в предыдущий каталог, это, конечно, не удалось:

 $ cd - 
bash: cd: / tmp / hello: Нет такого файла или каталога 
 

Это так, потому что предыдущее значение PWD (сохраненное в bash в OLDPWD) не могло быть отслежено.
Это было (как вы сообщили выше) / tmp / hello /. , который (привет, стирается) не может быть отслежен, и вызывает сбой cd - или cd $ OLDPWD .

$ echo $OLDPWD                 # at this point following your exact procedure.
/tmp/hello/.

6. Справочные страницы

Забавно также то, что даже справочная страница не работает, пока там есть:

Справочные страницы работали у меня на этом этапе, ну, фактически, во всех точках.

0
21.08.2018, 02:31
0 ответов

Теги

Похожие вопросы