Почему sudo gedit НЕ открывает файлы, начинающиеся с восклицательного знака

При попытке открыть файл с sudo gedit /path/to/file с именем файла, начинающимся с !, например, !config.ini, я не могу открыть файл. Однако, если я сделаю sudo nautilus, откройте файл с помощью gedit, и он откроется. Если файл переименован в config.ini, sudo gedit снова работает. Может кто-нибудь объяснить мне, пожалуйста.

5
задан 4 August 2012 в 03:17

4 ответа

Это обозначение события.

см. man bash:

  • ! Расширяется до идентификатора процесса самой последней выполняемой фоновой (асинхронной) команды.
0
ответ дан 4 August 2012 в 03:17

Легкое решение - навсегда отключить расширение истории, добавив следующую строку в ~/.bashrc

set +H

Если вы никогда не использовали преднамеренно расширение истории, вы ничего не пропустите, отключить его.

0
ответ дан 4 August 2012 в 03:17

Полное решение было бы заключить имя каталога в одинарные кавычки (').

Пример

sudo gedit /media/alexandro/'Disco Local'/'Dropbox (Equipe Alexandro)'/Pessoal/'!A Organizar'/Documentos/'!asd.txt'

0
ответ дан 4 August 2012 в 03:17

Вы вводите команду sudo gedit /path/to/file в оболочку (по умолчанию bash), но современные оболочки используют '!' персонаж для специальных целей. Специальные символы могут интерпретироваться без специального значения, если им предшествует символ «\».

Попробуйте:

gksu gedit /path/to/\!file

вместо

gksu gedit /path/to/!file

В современных оболочках введенные вами команды запоминаются, и вы можете повторно вводить их, используя «!» персонаж. !!, например, повторно вводит последнюю команду. Как указывает Ури, это называется указателем события. Интерпретатор bash также позволяет вам использовать Ctrl-R, чтобы легко находить команды, которые вы хотите повторно ввести, но «!» механизм все еще существует для нас, стариков, которые имеют привычку использовать «!» вместо. Другое использование "!" включите $! параметр, и его использование в арифметических и логических выражениях.

Ссылка на bash может быть полезна, если вы столкнетесь с такими загадками, потому что оболочки могут быть очень сложными. Руководство gnu bash здесь здесь .

Ури любезно упомянул, что вы должны использовать gksu или gksudo вместо sudo. Здесь есть объяснение: В чем разница между «gksudo nautilus»? и "sudo nautilus"? .

0
ответ дан 4 August 2012 в 03:17

Другие вопросы по тегам:

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