Функция переноса / перезаписи в Bash

#linux #bash #shell

#linux #bash #оболочка

Вопрос:

Как я могу переписать echo , чтобы напечатать какой-либо символ, прежде чем что-либо передать ему?

Я думал о чем-то подобном, что не работает:

 alias oldecho=echo
echo(){oldecho ==> $1}
 

Ответ №1:

Закрыть.

 echo() { builtin echo "==>" "$@"; }
 

builtin принудительно выполняет остальную часть команды как встроенную, что упрощает повторную реализацию встроенных функций.

Однако ваша проблема заключалась не в цитировании > .

Комментарии:

1. как я мог поставить ввод перед стрелкой?

2. 1 за использование builtin и обнаружение проблемы с помощью unquoted ==> . @juanpastas: Используйте $'n==> ‘ или предшествуйте builtin команде с printf 'n' , или даже другой builtin echo .

3. echo -ne «n==>» добавит новую строку

4. @juanpastas: В дополнение к другим предложениям, простой способ — просто нажать клавишу ввода сразу после ввода первого " (то есть перед " и первым = ).

Ответ №2:

Я не совсем уверен, что вы имеете в виду, но, возможно, это поможет…

alias echo='/bin/echo ==> $*'

… где я предполагаю ==> , что это символы, которые вы всегда хотите добавить.

(обратите внимание на обратную косую черту, которая вам нужна > , чтобы предотвратить интерпретацию как перенаправление.)

Комментарии:

1. Но echo почти всегда вызывается как встроенная команда оболочки, редко вызываемая /bin/echo . Особенно в bash, о чем спрашивает OP.

2. Так что измените его на builtin echo .