Bash / usr / bin / time命令在子Shell中运行命令

佛陀

在bash脚本中(在REHL5上运行),我使用/ usr / bin / time命令(而不是内置时间命令)来记录在同一脚本中运行的其他命令的运行时间。我面临的问题是,一些我想记录时间的命令不是内置命令或外部脚本,而是在脚本中声明或源自其他脚本的函数。我发现time命令失败并显示如下错误:

/usr/bin/time: cannot run shared-func: No such file or directory

这意味着我在其他地方声明的函数shared-func()在范围内不可见,因此时间无法运行该命令。我已经进行了一些测试,并验证了此错误的原因实际上是因为time命令试图在新的子shell中执行其命令,因此丢失了其范围内的每个已声明的函数或变量。有办法解决这个问题吗?理想的解决方案是强制time命令更改其行为,并使用当前的shell来执行其命令,但如果不可能的话,我也对任何其他解决方案感兴趣。

作为记录,下面是我运行的测试。我创建了两个小脚本:

shared.sh:

function shared-func() {
    echo "The shared function is visible."
}

test.sh:

#!/bin/bash

function record-timestamp() {
    /usr/bin/time -f % -a -o timestamps.csv "$@"
}

source "shared.sh"
record-timestamp shared-func

这是测试:

$ ./test.sh
/usr/bin/time: cannot run shared-func: No such file or directory
$ 
查尔斯·达菲

是一个不同的过程一个子shell,没有。

子shell是您在父shell分叉但不分叉时获得的东西exec()–这是通过复制当前shell实例进行的新过程。在子外壳程序中可以访问功能,尽管它们对父外壳程序没有直接影响(退出子程序时,使用子外壳程序更改进程状态)。

在不使用exec情况下启动外部程序时,shell首先派生,然后调用execve()来调用新程序。execve()用正在运行的程序替换内存中的过程映像-而不是fork(),即创建子shell导致失败。而是exec()一个单独程序的调用。

即使您的新进程也是一个shell,即使经历了任何exec()-family调用,它也不是子shell,而是一个全新的进程。


tl; dr:您不能使用外部程序将外壳函数调用包装在当前外壳中,因为外部程序的调用始终使用execve(),并且execve()始终清除进程状态-包括未导出的外壳函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

包含与号的bash脚本的/ usr / bin / time

来自分类Dev

BASH脚本在/ usr / bin中查找

来自分类Dev

无法从usr / bin运行命令

来自分类Dev

从/ usr / bin / env或/ bin启动bash

来自分类Dev

使用/ usr / bin / time shell命令提高%e精度

来自分类Dev

在 bash 中输入无效命令时,如何修复“/usr/bin/python: No such file or directory”?

来自分类Dev

在/ usr / bin / printf或Bash printf中以指定顺序处理参数

来自分类Dev

为什么“ / usr / bin / env bash -x”仅在命令行中有效?

来自分类Dev

在终端中键入命令总是返回“ -bash:/ usr / bin / python:是目录”

来自分类Dev

bash: /usr/bin/ruby: No such file or directory

来自分类Dev

bash:/ usr / bin / lein:权限被拒绝

来自分类Dev

终端开始给错误bash:/ usr / bin / lesspipe

来自分类Dev

VS Code 找不到 /usr/bin/bash

来自分类Dev

exec命令bin bash

来自分类Dev

Windows的/ usr / bin / time端口?

来自分类Dev

每当我尝试执行任何命令时,此命令:“. .bashrc”导致:“-bash:/usr/bin/whoami:参数列表太长”

来自分类Dev

/ usr / bin / alternatives命令引发用法错误

来自分类Dev

/ usr / bin / alternatives命令引发用法错误

来自分类Dev

/usr/bin/script 不回显任何命令

来自分类Dev

/usr/bin/expect 内联多行命令

来自分类Dev

Shell执行:时间与/ usr / bin / time

来自分类Dev

如果将shell设置为/ usr / bin / bash,则无法登录

来自分类Dev

如何在chroot的SSH Plesk托管的Webspace环境中忽略shebang“#!/ usr / bin / env bash”

来自分类Dev

如果 [ "x/usr/bin" != "x" ] 在 bash 脚本中是什么意思?

来自分类Dev

带有Docker执行器的Gitlab-CI / usr / bin / bash:第90行:git:命令未找到

来自分类Dev

-bash:/ usr / bin / yum:/ usr / bin / python:错误的解释器:没有这样的文件或目录

来自分类Dev

/bin 或 /usr/bin 中的程序是否必须从 shell 调用?

来自分类Dev

$ usr中/ usr / bin和/ usr / local / bin的顺序以及更多

来自分类Dev

/bin/bash 命令中函数的函数参数

Related 相关文章

  1. 1

    包含与号的bash脚本的/ usr / bin / time

  2. 2

    BASH脚本在/ usr / bin中查找

  3. 3

    无法从usr / bin运行命令

  4. 4

    从/ usr / bin / env或/ bin启动bash

  5. 5

    使用/ usr / bin / time shell命令提高%e精度

  6. 6

    在 bash 中输入无效命令时,如何修复“/usr/bin/python: No such file or directory”?

  7. 7

    在/ usr / bin / printf或Bash printf中以指定顺序处理参数

  8. 8

    为什么“ / usr / bin / env bash -x”仅在命令行中有效?

  9. 9

    在终端中键入命令总是返回“ -bash:/ usr / bin / python:是目录”

  10. 10

    bash: /usr/bin/ruby: No such file or directory

  11. 11

    bash:/ usr / bin / lein:权限被拒绝

  12. 12

    终端开始给错误bash:/ usr / bin / lesspipe

  13. 13

    VS Code 找不到 /usr/bin/bash

  14. 14

    exec命令bin bash

  15. 15

    Windows的/ usr / bin / time端口?

  16. 16

    每当我尝试执行任何命令时,此命令:“. .bashrc”导致:“-bash:/usr/bin/whoami:参数列表太长”

  17. 17

    / usr / bin / alternatives命令引发用法错误

  18. 18

    / usr / bin / alternatives命令引发用法错误

  19. 19

    /usr/bin/script 不回显任何命令

  20. 20

    /usr/bin/expect 内联多行命令

  21. 21

    Shell执行:时间与/ usr / bin / time

  22. 22

    如果将shell设置为/ usr / bin / bash,则无法登录

  23. 23

    如何在chroot的SSH Plesk托管的Webspace环境中忽略shebang“#!/ usr / bin / env bash”

  24. 24

    如果 [ "x/usr/bin" != "x" ] 在 bash 脚本中是什么意思?

  25. 25

    带有Docker执行器的Gitlab-CI / usr / bin / bash:第90行:git:命令未找到

  26. 26

    -bash:/ usr / bin / yum:/ usr / bin / python:错误的解释器:没有这样的文件或目录

  27. 27

    /bin 或 /usr/bin 中的程序是否必须从 shell 调用?

  28. 28

    $ usr中/ usr / bin和/ usr / local / bin的顺序以及更多

  29. 29

    /bin/bash 命令中函数的函数参数

热门标签

归档