Итак, я работаю в среде UNIX, и я заметил, что внутри моего рабочего каталога, который находится в нескольких милях от моего дома UNIX, есть ~
.
Теперь, однажды в прошлом, я сделал rm -rf ~
из своего рабочего каталога и в итоге полностью удалил мой домашний каталог, и мне пришлось задействовать ИТ.
Я не хочу делать это снова. В то же время я хочу знать
Почему
~
создается в моем рабочем каталоге? Это сбой пальца при сохранении (:w!
но что происходит:w~
? !!)Перед регистрацией есть скрипт, который ищет дополнительные файлы или папки, которые p4 не знает, поэтому def
~
может вызвать проблему. Так, как я могу удалить~
из своего рабочего каталога и в то же время не стирать мой дом?
У меня есть команда резервного копирования, del
которую я использую вместо rm -rf
. Он просто помещает вещи во временное местоположение. Я мог бы использовать это и избавиться от ~
. Но мне больше интересно знать, почему это происходит, и как я могу это убрать?
/home/yourUserName/~
для доступа к каталогу с именем~
.Ответы:
Либо процитируйте это:
Или ссылаться на него по пути, а не просто по базовому имени:
Следует отметить , что, несмотря на забавный вид одного имени персонажа, это не концептуально не отличается , чем если бы вы создали файл с именем
SOME$PATH
, выполнивИ попытался удалить это, выполнив:
( Предупреждение: переменная
SOME$PATH
не приводится в кавычках для примера здесь. Обычно она заключена в кавычки'SOME$PATH'
)В обоих случаях оболочка расширяет имя, которое вы даете, и вам нужно это предотвратить.
Также: не используйте
rm -rf
для удаления файла! Цель всегоrm -r
- сказать,rm
что все в порядке, чтобы удалить каталоги. Если вы не хотите случайно удалить целые каталоги при попытке удалить файлы, не проходите мимоходом-r
!источник
:w~
в vim действительно создал файл с именем~
.rm ~
вернулсяcannot remove /home/seth it is a directory
.rm "~"
действительно удалил файл . Просто чтобы подчеркнуть , не проходят-rf
автоматически .kill -9
по умолчанию, которое я видел.rm -i $FOO
намеренно не заключает в кавычки переменную ради примера, но все же: показывать пример оболочки сrm
включенной переменной без кавычек в качестве аргумента ОЧЕНЬ ПЛОХО , ну, извините, независимо от контекста. Я уверен, что это может быть даже доказано :) Я добавлю некоторые примечания - но, может быть, вы могли бы немного изменить пример?SOME/bin:/usr/bin
в их файловой системе. :)Тильда, если она используется отдельно в контексте,
ls ~
будет указывать ваш домашний каталог как ~ ярлык для вашего домашнего каталога. Если вы это сделали,ls ~brown
то перечислите содержимое домашнего каталога Брауна.VIM, если не указано иное, создаст резервную копию измененного файла: myFile myFile ~.
Это хорошо, так как создает резервную копию, но если вы не хотите ее добавлять, добавьте к вам файл .vimrc: не устанавливайте резервную копию (к которой я только что обратился
vi ~/.vimrc
).И, конечно, как говорили другие, если у вас есть файл с именем ~, тогда просто экранируйте символ как \ ~
источник
Это может быть вызвано опечатками. Если ваша
TERM=xterm
конфигурация похожа на мою, то практически каждая функциональная клавиша на вашей клавиатуре будет отправлять escape-последовательности, например ...Более половины выходных данных
infocmp -1
содержит~
тильду на моей машине - и я не могу понять, что делает большинство из них. Я знаю, что,zsh
по крайней мере, на самом деле съедает оставшуюся часть строки в большинстве случаев - и оставляет только~
тильду .Например, набрав
echo
затем<space>
тоF6
и<return>
печатает ...Фактически отправленная escape-последовательность ...
Интересно, что есть другие из этих escape-последовательностей, которые содержат
>
символы.Это обычно используемые escape-коды - строки сброса и инициализации. Нетрудно представить, что упавшая клавиатура или какое-либо нажатие кнопки, когда интерактивная оболочка ожидает ввода, может привести к случайному усечению
~
файлов, встречающихся в вашей файловой системе. По крайней мере, это иногда появляется на моем.источник