Я знаю, что есть определенный набор правил, которые расширяют команды, введенные пользователем. (давайте поговорим о оболочке bash.)
Можно ли распечатать команду в форме после расширения оболочки? Кажется, это хорошая утилита, чтобы узнать и убедиться, как оболочка расширяет специальные символы.
например
$ echo *
{all the filenames in current dir}
Я хочу распечатать расширенную команду, которая является следующей строкой:
echo {all the filenames in .}
echo cat * | someprogram
, которые не делают то, что вы думаете из этого ответа.Вы можете использовать
set -x
.Например, рассмотрим скрипт:
При запуске он показывает расширенный
echo
оператор перед его выполнением:И, как указывает Кундор, это также работает в интерактивном режиме в командной строке:
Документация
man bash
объясняет, чтоset -x
делает следующее:Значением по умолчанию для
PS4
, как показано выше, является знак плюс, за которым следует пробел.источник
Для интерактивной оболочки нажатие с
Ctrl+x
последующим*
после ввода шаблона glob отредактирует вашу командную строку с расширенным шаблоном glob. Со страницы руководства bash:Вас также могут заинтересовать расширения глобальных списков (
Ctrl+x
,g
).источник
Ctrl+x, *
сразу после вводаecho *
и до нажатия клавиши ввода? Если это все еще не работает, вы можете изменить~/.inputrc
и связать glob-expand-word с чем-то другим.Ctrl+x
а затемShift+8
. Вы можете попробовать seing, еслиCtrl+x, g
работает, или, как я уже говорил ранее, назначить свой собственный ключ в.inputrc
файле.Если вы хотите увидеть, как аргументы расширяются или маркируются, вы можете использовать программу или скрипт, который выводит их аргументы. Вот одна реализация в
bash
:Предполагая, что вы поместите это в файл с именем
printargs.sh
(и сделаете его исполняемым), вы получите такой выводисточник