LINUX.ORG.RU

function name alias in bash

 


0

1

Есть ли возможность прописать алиас для функции в bash?

#!/bin/bash
# alias f = g
# alias запрещать=запретить
function запрещать() {
        if [ $1 -eq 3 ]
        then
                echo -n "Запрещено. Код ошибки: "
                echo `expr 2 \* 3 \* 47`
        else
                echo -n "."
                запрещать `expr $1 + 1`
        fi
}

function запретить() {
        запрещать 1
}

запретить
★★★★★

запрещать()

Серьёзно?

Deleted
()
Ответ на: комментарий от Deleted

Да

Хм. «Moreover, a script fails to expand an alias itself within „compound constructs,“ such as if/then statements, loops, and functions», http://tldp.org/LDP/abs/html/aliases.html

«Within scripts like library scripts, sometimes an alias for a function is needed, such as when a function is renamed but backward compatibility is required. This can be accomplished by creating a simple function with the old name that passes all its arguments to the new function...» (SO)

В общем, никак.

pacify ★★★★★
() автор топика
Ответ на: комментарий от Deleted
#!/bin/bash
func () { echo 123 ; }
alias f=func
f
$ bash f.bash
f.bash: строка 4: f: команда не найдена

Я так понял, alias - только для интерактивного режима bash.

pacify ★★★★★
() автор топика
Последнее исправление: pacify (всего исправлений: 1)
Ответ на: комментарий от pacify

man bash> Aliases are not expanded when the shell is not interactive, unless the expand_aliases shell option is set using shopt (see the description of shopt under SHELL BUILTIN COMMANDS below)

$ cat sample.bash
#!/usr/bin/env bash

shopt -sq expand_aliases

func () { echo 123 ; }
alias f=func
f
$ chmod +x sample.bash && ./sample.bash
123
Но вообще да, alias - это костылик именно для interactive

man bash> For almost every purpose, aliases are superseded by shell functions

Deleted
()
Ответ на: комментарий от pacify

Я так понял, alias - только для интерактивного режима bash.

Открытия пятизвёздочного на юниксовом форуме 🤦‍♂️

anonymous
()
#!/bin/sh

func1() {
    echo "lol ${1}"
}

func2() {
    func1 $1
}

func2 you



[11:34] u@netstation:~> ./lol
lol you

IPR ★★★★★
()
Ответ на: комментарий от anonymous

Открытия пятизвёздочного на юниксовом форуме

Я много, чего не знаю, юный падаван =)

Ведь жизнь интересней, когда есть, что изучать =)

pacify ★★★★★
() автор топика
Ответ на: комментарий от Deleted

... unless the expand_aliases shell option is set using shopt

Отлично. Всё работает.

#!/bin/bash

shopt -sq expand_aliases

function запрещать() {
        if [ $1 -eq 3 ]
        then
                echo -n "Запрещено. Код ошибки: "
                echo `expr 2 \* 3 \* 47`
        else
                echo -n "."
                запрещать `expr $1 + 1`
        fi
}

#function запретить() {
#       запрещать 1
#}

alias запретить='запрещать 1'

запретить
pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.