Передача псевдонима в качестве аргумента функции linux bash

Привет всем, я изучаю, как использовать файл.bashrc в Linux, и, как говорится в заголовке, мне интересно, как заставить функцию распознавать аргумент как псевдоним

У меня есть псевдоним home, определяемый как: alias home=$HOME

и функция определена как

function go(){
cd $1
ls $1
}

но, когда я делаю go homeя получил

bash: cd: home: No such file or directory ls: cannot access home: No such file or directory

когда я хочу это сделать, иди $HOME

как бы я реализовать это?

2 ответа

Решение

Псевдоним - это не подстановка слов, а небольшая вновь созданная команда:

$ alias bla=ls
$ bla
file1
file2
file3
…

Таким образом, он не может быть использован так, как вы предполагали.

Вы можете использовать подстановку переменных для этого:

$ home=$HOME
$ function go() {
  cd "$(eval echo \$"$1")"
}
$ go home

Если вы хотите использовать псевдоним, несмотря на то, что это злоупотребление, попробуйте это:

$ alias home=$HOME
$ function go() {
  cd "$(type "$1" | sed -e 's/.*is aliased to .//' -e 's/.$//')"
}
$ go home

Мне интересно, как заставить функцию распознавать аргумент как псевдоним

Чтобы ответить на ваш вопрос буквально, вы можете использовать type -t внутри вашей функции, чтобы определить, является ли ее аргумент псевдонимом. Но это, вероятно, не то, что вы хотите.

AFAIK, то, что вы на самом деле хотите, не возможно. Из руководства Bash (выделено мое):

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

Самое близкое, что вы можете получить:

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