LINUX.ORG.RU
ФорумTalks

«rm -f», который мы заслужили

 ,


0

1

POSIX will say in a future version that calling «rm -f» with no argument is OK; and this sensible behaviour seem to be already very widespread in «the wild» (and possibly lacking only on those systems that are well on their way to obsolescence).

http://horis.kanardia.eu/rok2/Builder/igep_old/buildroot-2015.08-rc1/output/b...

Это было обнаружено в тарболе свежего automake 1.16.1, где это также подчёркивается и в файле NEWS наряду с другими планами для automake 2.0.

Просто «rm -f», кстати, совершенно ничего не делает. Абсолютно. Но, это зачем-то протаскивают в POSIX...

★★★★★

Ну а что сказать то хотел?

Deleted
()

Там написано, зачем они так решили сделать:

Se we'd like to simplify several automake-generated «cleaning» rules
accordingly, to get rid of the awful idiom:

test -z "$(VAR)" || rm -f $(VAR)

Это упростит код, и не только automake-generated. Я встречал такие конструкции в обычных скриптах, в других проектах.

Я было подумал, может такое поведение лучше контролировать через ключи? Например, отдельный ключ для игнорирования ошибок при работе с ФС, и отдельный ключ для игнорирования несуществующих аргументов. Но если нужен такой контроль и более надёжная обработка ошибок, то, наверное, такое нужно писать на другом языке.

В общем, какие подводные камни могут быть с новым POSIX?

Pravorskyi ★★★
()
shopt -u nullglob
rm -f неСуществующийФайл.*
shopt -s nullglob
rm -f неСуществующийФайл.*

Почему поведение первого rm-а должно отличаться от второго?

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

А оно отличается?

► mkdir /tmp/123
► pushd /tmp/123/
/tmp/123 ~
► touch 1 2 3
► shopt -u nullglob 
► rm -f 4.* ; echo $?
0
► ls -l
total 0
-rw-rw-r-- 1 dexpl dexpl 0 мар 12 09:33 1
-rw-rw-r-- 1 dexpl dexpl 0 мар 12 09:33 2
-rw-rw-r-- 1 dexpl dexpl 0 мар 12 09:33 3
► rm -f 4.* ; echo $?
0
► ls -l
total 0
-rw-rw-r-- 1 dexpl dexpl 0 мар 12 09:33 1
-rw-rw-r-- 1 dexpl dexpl 0 мар 12 09:33 2
-rw-rw-r-- 1 dexpl dexpl 0 мар 12 09:33 3

dexpl ★★★★★
()
Ответ на: комментарий от Pravorskyi

Да, при таком поведении «rm -f», понятное дело, авторы скриптов могут чуть-чуть сократить строки, переложив, по сути, проверку аргументов на сам «rm -f», который при их наличии удалит что нужно, а при их отсутствии не выпадет в осадок. Но, я бы назвал это следствием (из уже имеющегося стандарта (если он имеется)). А чтобы протаскивать такое в стандарты нужны серьёзные основания.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от Sorcerer

Странно. Вероятно, у разработчиков не дошли руки обновить шаблон по которому они создают NEWS файл.

saahriktu ★★★★★
() автор топика

кстати, совершенно ничего не делает. Абсолютно

Печаль, надо было, чтобы подразумевалось /*

TheAnonymous ★★★★★
()
Ответ на: комментарий от dexpl

А оно отличается?

Там же написано - в дикой природе уже нет, а стандарт отстаёт.

DonkeyHot ★★★★★
()
Ответ на: комментарий от stevejobs

Для /* не требуется no preserve root. Только для /

cvs-255 ★★★★★
()

предлагаю еще rm -rf без аргумента на корень перенаправлять и sudo запрашивать, чтоб веселее было

upcFrost ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.