Вопрос: Псевдоним Bash с трубопроводом


Я не совсем уверен, что я делаю неправильно с этим. Я пытаюсь запустить команду

alias localip='ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1'

Если я запустил команду

ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1

Я получаю результат, который я ожидаю, однако, пытаясь создать псевдоним с командой, я получаю

-bash: синтаксическая ошибка около неожиданного токена `('

Любая помощь будет оценена по достоинству. ТИА.


4
2018-03-31 22:02


Источник




Ответы:


Вы размещаете одиночные кавычки в одинарных кавычках. Это не работает.

Попробуйте использовать "двойные кавычки" во внутреннем выражении.


5
2018-03-31 22:09



Или избегали одинарных кавычек. - Benjamin Bannier
Большое спасибо. Я знал, что это что-то простое, я просто смотрел на него слишком долго. - n8felton
Вы не можете избежать одиночных кавычек внутри одной строки: gnu.org/software/bash/manual/bashref.html#Single-Quotes - glenn jackman


Я нашел это намного более чистое решение, чтобы просто создать функцию и назвать ваш псевдоним после функции, например:

alias localip=GetLocalIP

function GetLocalIP()
{
   ip -4 -o addr show eth0 | egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}' | head -n 1
}

6
2017-10-10 19:04



В чем преимущество создания псевдонима для функции, а не просто назначение функции localip? Так же function совместимость ключевых слов с другими оболочками. Я бы предложил просто использовать localip() { ... - Tom Fenech