Bash:创建嵌套别名

733*_*llz 1 bash alias

我试图创建一个别名如下,其中app_folder是顶级文件夹,appX是可执行文件:

alias app_folder='/tmp/app'
alias app1='app_folder/app1'
alias app2='app_folder/app2'
alias app_output='cat app_folder/log.txt'
Run Code Online (Sandbox Code Playgroud)

当我在终端中调用它时,我得到这样的东西:

bash: app_folder/app1: No such file or directory
cat: app_folder/log.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我尝试了所有不同的方法,但没有一个工作:

app1="$(app_folder)"'/app1'
app1='`app_folder`/app1'
Run Code Online (Sandbox Code Playgroud)

这可能是使用别名,如果没有,还有其他方法吗?

zer*_*iff 6

我想你想要这样的东西:

APP_FOLDER="/tmp/app"
alias app1="$APP_FOLDER/app1"
alias app2="$APP_FOLDER/app2"
alias app_output="cat $APP_FOLDER/log.txt"
Run Code Online (Sandbox Code Playgroud)

如果这种情况经常发生变化,您可以在文件中使用它,例如,更改别名指向的文件夹:

APP_FOLDER="$1"
alias app1="$APP_FOLDER/app1"
alias app2="$APP_FOLDER/app2"
alias app_output="cat $APP_FOLDER/log.txt"
Run Code Online (Sandbox Code Playgroud)

因此,如果这是在"aliastest"文件中,您可以这样做:

. aliastest /tmp/app
Run Code Online (Sandbox Code Playgroud)

你会得到,例如:

$ alias | grep app
alias app1='/tmp/app/app1'
alias app2='/tmp/app/app2'
alias app_folder='/tmp/app'
alias app_output='cat /tmp/app/log.txt'
Run Code Online (Sandbox Code Playgroud)

这是你在找什么?或者,您可以使用单引号在别名中包含变量,例如:

alias app1='$APP_FOLDER/app1'
alias app2='$APP_FOLDER/app2'
alias app_output='cat $APP_FOLDER/log.txt'
Run Code Online (Sandbox Code Playgroud)

然后,每当您设置APP_FOLDER变量时,您的别名将使用它.