Подстановка истории псевдонима Bash похожа на \!* В csh

Мой вопрос очень похож на этот старый пост.

Я хотел бы сделать нечто подобное: поместить в псевдоним последний аргумент (ы), введенный в текущей командной строке. Это было бы эквивалентно csh \!* которые могут быть использованы в псевдонимах.

Согласно упомянутому посту, похоже, что проблема в расширении истории bash, поэтому вместо него используется fc. Идея состояла бы в том, чтобы замена выполнялась в середине строки команд, такой как alias cat='cat -n !!:* && echo ""' (как упрощенный пример, который не работает из-за проблемы расширения).

Однако это отличается от ссылочного поста в том смысле, что я хочу получить только аргументы после первой команды (т. Е. В посте они захватывают всю строку, а не всю строку, кроме нулевого аргумента, команды сам).

Каков наилучший способ сделать это в псевдониме bash? (Примечание: вы хотите сохранить этот псевдоним, а не скрипт или функцию).

1 ответ

Лучше избегать псевдонимов для чего-либо, кроме простых замен одной командой. Чтобы использовать аргументы, несколько команд и т. Д., Вы можете определить функцию, обращаясь к параметрам так же, как в сценарии:

foo() {
    do_this
    do_that "$1"
}

cat() { command cat "$@" && echo ""; }

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

Другие вопросы по тегам