gdm3 или lightdm не работают (X11 не запускается)

Если вы посмотрите на его исходный код , вы увидите, что shell-expand-lineна самом деле должен называтьсяshell-expand-line-as-if-it-were-a-word:

>> bashline.c
static int
shell_expand_line (count, ignore)
     int count, ignore;
{
    ...
      w->word = savestring (rl_line_buffer);
      w->flags = rl_explicit_arg ? (W_NOPROCSUB|W_NOCOMSUB) : 0;
      expanded_string = expand_word (w, rl_explicit_arg ? Q_HERE_DOCUMENT : 0);
>>> subst.c
/* Expand WORD, performing word splitting on the result.  This does
   parameter expansion, command substitution, arithmetic expansion,
   word splitting, and quote removal. */

WORD_LIST *
expand_word (word, quoted)
     WORD_DESC *word;
     int quoted;

Обратите внимание, что этот комментарий не включает расширение имени файла или тильды. Так что это в основном случайность, что это работает даже для первой тильды (тильда имеет значение только в начале слова, в любом случае ). Но это также будет выполнять замену процессов, что также не упоминается. Тяжелая работа находится в функции expand_word_internalв том же файле.

rl_explicit_argв первом фрагменте означает, что если вы нажмете Esc -1 или Alt -2 перед комбинацией клавиш, привязанной к shell-expand-line, удаление кавычек не произойдет и процесс/команда замена будет. Довольно интуитивно, не так ли?

Вы можете попробовать отправить отчет об ошибке, но, вероятно, в bash уже есть тысячи подобных ограничений и особых случаев.

0
15.10.2021, 08:45
0 ответов

Теги

Похожие вопросы