Я пишу сценарий bash, который запускает каждый из своих аргументов как команду. Это работает для команд в моем PATH
, но не для псевдонимов. Я могу напрямую вызвать псевдоним в сценарии, но я не могу вызвать псевдоним, который был передан в качестве аргумента.
Проблема (я предполагаю) состоит в том, что псевдонимы раскрываются перед переменными. Есть ли способ запустить псевдонимы из переменной?
Пример скрипта:
#!/bin/bash
# File: runall
shopt -s expand_aliases
source ~/.aliases
while (( "$#" )); do
$1
shift
done
runall "echo test"
работает, но runall "myalias"
даетrunall: line 8: myalias: command not found
eval
переменных?eval "echo $1"
. Скажи, что я звоню./script.sh "hello;rm -rf ~
. Что исполняется?echo hello
с последующимrm -rf ~
. Очевидно, это надуманный пример, но принцип верен.eval
перед$1
работал, так как я уже имелshopt -s expand_aliases
. Спасибо!У меня была похожая проблема, и мне удалось решить мою проблему, превратив псевдонимы в функции, как описано на этом сайте , которые работали для меня.
например
в
источник