История изменений
Исправление Tanger, (текущая версия) :
Это алиас. Так же как и для cp.
Ээ. нет.
$ alias | grep rm
$
https://github.com/coreutils/coreutils/blob/master/src/rm.c
static void
rm_option_init (struct rm_options *x)
{
x->ignore_missing_files = false;
x->interactive = RMI_SOMETIMES;
x->one_file_system = false;
x->remove_empty_directories = false;
x->recursive = false;
x->root_dev_ino = NULL;
x->stdin_tty = isatty (STDIN_FILENO);
x->verbose = false;
/* Since this program exits immediately after calling 'rm', rm need not
expend unnecessary effort to preserve the initial working directory. */
x->require_restore_cwd = false;
}
Насколько я понял, поведение по умолчанию нельзя задать ключами.
Изначально в x->interactive
ставится RMI_SOMETIMES
, а в переменную prompt_once
- false.
Если указать опцию -I
: в x->interactive
, запишется RMI_SOMETIMES
, но в переменную prompt_once
- true. См. разницу в листинге ниже.
$ touch test1 test2 test3 test4
$ chmod 400 test*
$ rm ---presume-input-tty test* < /dev/null # this undocumented flag sets x->stdin_tty to 'true'
rm: remove write-protected regular empty file 'test1'? rm: remove write-protected regular empty file 'test2'? rm: remove write-protected regular empty file 'test3'? rm: remove write-protected regular empty file 'test4'?
$ ls test*
test1 test2 test3 test4
$ rm test*
rm: remove write-protected regular empty file 'test1'? n
rm: remove write-protected regular empty file 'test2'? n
rm: remove write-protected regular empty file 'test3'? n
rm: remove write-protected regular empty file 'test4'? n
$ rm -I test*
rm: remove 4 arguments? n
$ rm -i test* < /dev/null
rm: remove write-protected regular empty file 'test1'? rm: remove write-protected regular empty file 'test2'? rm: remove write-protected regular empty file 'test3'? rm: remove write-protected regular empty file 'test4'?
$ rm test* < /dev/null
$ ls test*
ls: cannot access 'test*': No such file or directory
То есть по факту получается что для rm без параметров запущенной в терминале - работает как с -i, а с запущенной не в tty - как с -f. Но вообще как-то мутновато сделано. Часть описана в rm.c, часть в remove.c..
Исходная версия Tanger, :
Это алиас. Так же как и для cp.
Ээ. нет.
$ alias | grep rm
$
https://github.com/coreutils/coreutils/blob/master/src/rm.c
static void
rm_option_init (struct rm_options *x)
{
x->ignore_missing_files = false;
x->interactive = RMI_SOMETIMES;
x->one_file_system = false;
x->remove_empty_directories = false;
x->recursive = false;
x->root_dev_ino = NULL;
x->stdin_tty = isatty (STDIN_FILENO);
x->verbose = false;
/* Since this program exits immediately after calling 'rm', rm need not
expend unnecessary effort to preserve the initial working directory. */
x->require_restore_cwd = false;
}
Насколько я понял, поведение по умолчанию нельзя задать ключами.
Изначально в x->interactive
ставится RMI_SOMETIMES
, а в переменную prompt_once
- false.
Если указать опцию -I
: в x->interactive
, запишется RMI_SOMETIMES
, но в переменную prompt_once
- true. См. разницу в листинге ниже.
$ touch test1 test2 test3 test4
$ chmod 400 test*
$ rm ---presume-input-tty test* < /dev/null # this undocumented flag sets x->stdin_tty to 'true'
rm: remove write-protected regular empty file 'test1'? rm: remove write-protected regular empty file 'test2'? rm: remove write-protected regular empty file 'test3'? rm: remove write-protected regular empty file 'test4'?
$ ls test*
test1 test2 test3 test4
$ rm test*
rm: remove write-protected regular empty file 'test1'? n
rm: remove write-protected regular empty file 'test2'? n
rm: remove write-protected regular empty file 'test3'? n
rm: remove write-protected regular empty file 'test4'? n
$ rm -I test*
rm: remove 4 arguments? n
$ rm -i test* < /dev/null
rm: remove write-protected regular empty file 'test1'? rm: remove write-protected regular empty file 'test2'? rm: remove write-protected regular empty file 'test3'? rm: remove write-protected regular empty file 'test4'? artem@pcgen /tmp $ rm test* < /dev/null
$ ls test*
ls: cannot access 'test*': No such file or directory
То есть по факту получается что для rm без параметров запущенной в терминале - работает как с -i, а с запущенной не в tty - как с -f. Но вообще как-то мутновато сделано. Часть описана в rm.c, часть в remove.c..