【问题标题】:Can't exec an alias or function [closed]无法执行别名或函数[关闭]
【发布时间】:2020-11-30 22:07:38
【问题描述】:

我有一个别名,我希望能够使用exec 调用它,但我不确定如何使它工作。该示例已简化,但我认为足以突出该问题。将别名更改为函数也不起作用。直接调用别名/函数确实有效,只是在使用 exec 时无效。

我使用的命令是,

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

但它失败了,类似于以下内容,

bash: exec: myalias: not found

难道不能使用 exec 来做到这一点吗?

【问题讨论】:

  • 这不是别名,而是常规变量。您需要$ 来扩展变量,例如"$myalias"mywiki.wooledge.org/BashFAQ/050
  • 为什么要在上面使用exec?像这样的命令似乎没有多大意义。
  • 一般情况下,exec 需要一个可执行文件,在别名扩展或参数扩展之后可能会提供也可能不会提供。
  • 对不起,原来的问题应该是使用别名。使用正确的 sn-p 更新。
  • 执行某事意味着用不同的进程替换当前进程。因此,您只能执行一个可执行文件。别名和函数都不是可执行文件。如果你想开车时间表有点:你可以开车,你可以用时间表找到合适的公共汽车,但你不能开车。

标签: bash shell exec zsh


【解决方案1】:

您的示例中没有任何函数或别名,但如果您确实有别名,您可以为 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 说明为什么会这样:

别名允许字符串在用作单词时替换它 一个简单命令的第一个字。 [...] 如果别名值的最后一个字符为空白,则别名后的下一个命令字也会检查别名扩展。

【讨论】:

    【解决方案2】:

    别名定义:

    $ 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"
    

    “运行”变量:

    $ ${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 ...
    

    【讨论】:

    • 我原来的帖子不正确,更新为使用别名。
    猜你喜欢
    • 2016-12-22
    • 2011-06-22
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 2019-09-26
    • 2021-02-24
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多