LINUX.ORG.RU

История изменений

Исправление 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..