Bash - 编译可加载的睡眠

时间:2014-01-29 02:40:28

标签: c bash gcc makefile ld

我正在尝试编译bash src tarball中包含的sleep loadable。

我已尝试运行以下主题的帖子#7中列出的命令,

https://bbs.archlinux.org/viewtopic.php?pid=1366887#p1366887

但是在编译sleep命令时遇到错误。

这是我运行make sleep时收到的输出:

System:~/bash-4.0/examples/loadables root# make sleep
gcc -fno-common -DHAVE_CONFIG_H -DSHELL -DMACOSX -g -O2 -I. -I.. -I../.. -I../../lib -I../../builtins -I../../include -I/var/root/bash-4.0 -I/var/root/bash-4.0/lib -I/var/root/bash-4.0/builtins -I../../lib/intl -I/var/root/bash-4.0/lib/intl -c -o sleep.o sleep.c
gcc -dynamic   -o sleep sleep.o
Undefined symbols:
  "_main", referenced from:
      __start in crt1.10.5.o
  "_fsleep", referenced from:
      _sleep_builtin in sleep.o
  "_builtin_usage", referenced from:
      _sleep_builtin in sleep.o
  "_builtin_error", referenced from:
      _sleep_builtin in sleep.o
  "_uconvert", referenced from:
      _sleep_builtin in sleep.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [sleep] Error 1

有谁知道如何让bash睡眠加载到编译?

提前致谢。

更新

源代码已从http://ftp.gnu.org/gnu/bash/bash-4.0.tar.gz下载。它尚未修改。

为什么我要使用可加载的睡眠?

我有几个等待某事发生的程序,然后执行一些代码,然后再等一下。我使用外部sleep程序来阻止它们在循环时占用处理器时间。我想使用sleep可加载来避免创建外部sleep进程。我已经尝试使用read命令,但是当我将bash脚本作为launchdaemons运行时,这是行不通的,因为没有终端。我也尝试过使用这个read命令解决方案(https://unix.stackexchange.com/questions/68236/#68269),但是在冻结之前bash只循环了两次。

我的目标是找出一些能够在不使用外部程序的情况下在bash中睡觉的方法。

1 个答案:

答案 0 :(得分:0)

首先,我们需要知道您从哪里获得源代码,以及您使用它做了什么。 iOS基于BSD,而不是Linux,因此用于编译的archlinux指令可能不那么相关。 iPhone上的iOS问题实际上并不是一个完整的操作系统,而是一个明显缩减的版本。

另外,告诉我们想要睡觉的原因是什么,我们可以提供另一种选择。例如,如果你已经读过,这应该可以工作(睡眠时间为5.5秒):读取-t 5.5 -N 0。

有些人还使用ping到不存在的IP,并且X秒超时。