无法执行别名或函数

Can't exec an alias or function

我有一个可以通过 exec 调用的别名,但我不确定如何让它工作。该示例已简化,但我认为足以突出问题。将别名更改为函数也不起作用。直接调用 alias/function 确实有效,只是在使用 exec.

时无效

我使用的命令是,

alias myalias="ls -lah /tmp"
exec myalias

但是它失败了,类似下面的东西,

bash: exec: myalias: not found

难道不能使用 exec 执行此操作吗?

别名定义:

$ alias myalias='ls -lah /tmp'

调用别名:

$ myalias
total 36M
drwxrwxrwt+ 1 myuser None    0 Nov 30 16:01 ./
drwxr-xr-x+ 1 myuser None    0 Nov  6 11:29 ../
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 a
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 b
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 c
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 d
-rw-r--r--  1 myuser mygroup 36M Jun  6 17:29 giga.txt
drwx------+ 1 myuser mygroup 0 Mar  8  2020 runtime-makaakd/
drwx------+ 1 myuser mygroup 0 Nov  8 16:10 tmp.8yl3CJgSn2/
-rw-------  1 myuser mygroup 66 Oct 14 21:49 tmp.BeEvxDpHGr
... snip ...

原样(将字符串分配给变量):

$ myalias="ls -lah /tmp"

'Running'变量:

$ ${myalias}
total 36M
drwxrwxrwt+ 1 myuser None    0 Nov 30 16:01 ./
drwxr-xr-x+ 1 myuser None    0 Nov  6 11:29 ../
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 a
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 b
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 c
-rw-r--r--  1 myuser mygroup 0 Oct 10 11:31 d
-rw-r--r--  1 myuser mygroup 36M Jun  6 17:29 giga.txt
drwx------+ 1 myuser mygroup 0 Mar  8  2020 runtime-makaakd/
drwx------+ 1 myuser mygroup 0 Nov  8 16:10 tmp.8yl3CJgSn2/
-rw-------  1 myuser mygroup 66 Oct 14 21:49 tmp.BeEvxDpHGr
... snip ...

您的示例中没有任何函数或别名,但如果您确实有别名,则可以为 exec 本身设置别名来执行它:

#!/bin/bash -i

# Define an alias
alias myalias="ls -lah /tmp"

# Allow `exec` to work for aliases
alias exec='exec '

# This now works as expected
exec myalias

这里 man bash 说明了为什么会这样:

Aliases allow a string to be substituted for a word when it is used as the first word of a simple command. [...] If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion.