Подстановка истории псевдонима Bash похожа на \!* В csh
Мой вопрос очень похож на этот старый пост.
Я хотел бы сделать нечто подобное: поместить в псевдоним последний аргумент (ы), введенный в текущей командной строке. Это было бы эквивалентно csh \!*
которые могут быть использованы в псевдонимах.
Согласно упомянутому посту, похоже, что проблема в расширении истории bash, поэтому вместо него используется fc. Идея состояла бы в том, чтобы замена выполнялась в середине строки команд, такой как alias cat='cat -n !!:* && echo ""'
(как упрощенный пример, который не работает из-за проблемы расширения).
Однако это отличается от ссылочного поста в том смысле, что я хочу получить только аргументы после первой команды (т. Е. В посте они захватывают всю строку, а не всю строку, кроме нулевого аргумента, команды сам).
Каков наилучший способ сделать это в псевдониме bash? (Примечание: вы хотите сохранить этот псевдоним, а не скрипт или функцию).
1 ответ
Лучше избегать псевдонимов для чего-либо, кроме простых замен одной командой. Чтобы использовать аргументы, несколько команд и т. Д., Вы можете определить функцию, обращаясь к параметрам так же, как в сценарии:
foo() {
do_this
do_that "$1"
}
cat() { command cat "$@" && echo ""; }
(Обычно функции переопределяют исполняемые файлы, поэтому command cat
необходим, если вы хотите пропустить функцию и напрямую запустить исполняемый файл.)