Передача псевдонима в качестве аргумента функции 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`