无法执行别名或函数
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.
我有一个可以通过 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.