Tilde (~) всередині робочого каталогу Unix


22

Отже, я працюю в середовищі UNIX, і я помітив, що всередині мого робочого каталогу, що знаходиться в милях від мого будинку UNIX, є ~.

Тепер, колись у минулому, я rm -rf ~зі свого робочого каталогу закінчив стерти домашній каталог і мусив залучати ІТ.

Я не хочу робити це знову. Водночас я хочу знати

  1. Чому ~створено в моєму робочому каталозі? Це несправне ковзання пальця при збереженні ( :w!але що трапляється :w~? !!)

  2. Перед тим, як зареєструватися, існує сценарій, який шукає зайві файли чи папки, про які невідомо p4, тому ~визначити, що це може спричинити проблему. Тож як я можу видалити ~зі свого робочого каталогу і в той же час не стерти свій дім?

У мене є команда резервного копіювання, delяку я називаю замість rm -rf. Він просто розміщує речі у тимчасовому місці. Я міг би скористатися цим і позбутися цього ~. Але мені більше цікаво знати, чому це відбувається, і як я можу це усунути?


Зазвичай оболонку замінюють ~ на початку шляху з вашим домашнім каталогом. Використовуйте повний шлях /home/yourUserName/~для доступу до каталогу, який називається ~.
jofel

І ~ oheruser / файл можна використовувати для посилання на домашні каталоги інших користувачів заради повноти.
godlygeek

Схоже на сварку!
Xolve

Відповіді:


36

Або цитуйте це:

rm -i '~'
rm -i "~"
rm -i \~

Або посилайтеся на нього шляхом, а не просто базовим іменем:

rm -i ./~
rm -i /path/to/~

Зауважте, що, незважаючи на те, що це смішне назви одного символу, це концептуально не відрізняється, ніж якби ви створили файл, названий SOME$PATHвиконанням

touch 'SOME$PATH'

І спробував видалити його, зробивши:

rm -i SOME$PATH

( Попередження: змінна SOME$PATH не цитується заради прикладу тут. Зазвичай вона міститься в лапках 'SOME$PATH' )

В обох випадках оболонка розширює ім’я, яке ви даєте, і вам потрібно цього запобігти.

Також: Не використовуйте rm -rfдля видалення файлу! Вся мета rm -r- сказати, rmщо добре видаляти каталоги. Якщо ви не хочете випадково видаляти цілі каталоги під час спроби видалення файлів, не передавайте звично -r!


12
Я щойно це перевірив. :w~in vim створив файл з назвою ~. rm ~повернувся cannot remove /home/seth it is a directory. rm "~"видалив файл . Просто підкреслити не проходить -rfавтоматично .
Сет

4
+1 - рекомендувати за промовчанням пропустити насильницькі варіанти. Це схоже на те kill -9, що я роблю за замовчуванням, що я бачив.
Селада,

Я бачу, що приклад rm -i $FOOнавмисно не цитує змінну заради прикладу, але все-таки: показ прикладу оболонки із rmвключеною котируемою змінною як аргумент ДУЖЕ БАД , ну, вибачте, незалежно від контексту. Я впевнений, що це навіть можна підтвердити :) Я додам трохи примітки - але, можливо, ви могли б трохи змінити приклад?
Волкер Зігель,

@VolkerSiegel, пункт взятий - я взяв участь у вашій редакції, але виноска здалася трохи надто важкою. Я також перейшов на ім’я змінної, що навіть рідше спричинить проблеми - більшість людей не мають файлу, названого SOME/bin:/usr/binніде у своїй файловій системі. :)
godlygeek

Так, добре виглядає! (Я майже збирався відповісти: Що? Тяжкий? Чи в житті ви коли-небудь відчували справжню проблему котирування? зрозуміти навіть без помилкових прикладів! )
Волкер Зігель

1

Тильда при самостійному використанні ls ~відобразить ваш домашній dir, оскільки ~ - це ярлик до вашого домашнього dir. Якщо ви це зробили, ls ~brownви перерахуєте вміст домашнього режиму Брауна.

Якщо інше не вказано, VIM створить резервну копію зміненого файлу: myFile myFile ~.

Така поведінка хороша, оскільки створює резервну копію, але якщо ви цього не хочете, додайте до вас .vimrc файл: не встановлюйте резервну копію (до якої я тільки що звертався vi ~/.vimrc).

І, звичайно, як казали інші, якщо у вас є файл з назвою ~, тоді просто уникайте знака як \ ~

me 217 % vi this      (saved as :w~)
me 218 % ls
this  ~
me 219 % cat \~
kfdkdfk
me 220 % \rm \~
me 221 % ls
this

0

На це можуть вплинути помилки. Якщо ваш TERM=xtermконфігурація є чимось на зразок мого, то практично кожна функціональна клавіша на вашій клавіатурі надсилатиме послідовності втечі, як ...

infocmp -1 | grep -n \~ | tail -n3
138:    kich1=\E[2~,
141:    knp=\E[6~,
142:    kpp=\E[5~,

Більше половини випуску infocmp -1містить ~тильда втече на моїй машині - і я в збитті розумію, що робить більшість з них. Я знаю, що zshпринаймні насправді з'їдає втечену частину струни в більшості випадків - і залишає лише ~тильду .

Наприклад, набравши echoпотім <space>потім F6і <return>друкує ...

/home/mikeserv

Фактична послідовність втечі:

kf6=\E[17~

Цікаво, що є й інші ці послідовності втечі, які містять >символи.

infocmp -1 | grep \>
is2=\E[!p\E[?3;4l\E[4l\E>,
rmkx=\E[?1l\E>,
rs2=\E[!p\E[?3;4l\E[4l\E>,

Це звичайні втечі - рядки скидання та ініціалізації. Не важко уявити, що випала клавіатура чи якесь поштовх кнопок, коли інтерактивна оболонка очікує на вхід, може призвести до випадкових усічених ~файлів у вашій файловій системі. Принаймні, це час від часу з’являється на моєму.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.