On Thursday 30 September 2010 02:49, Rob Landley wrote:
> Bug #1: defconfig defaults to ash, but I thought hush was the future bash
> replacement, recipient of future development work, and ash was a dead end.
No (at least not yet). ash is still the default shell.
> Bug #2: if you "exec" a program, ash doesn't rewrite argv[0] to have the new
> executable name, but keeps the name of the previous shell.
>
> This is an issue when I try to do a gawk wrapper like so:
>
> #!/bin/sh
>
> exec /bin/awk "$@"
>
> The result is:
>
> busybox: gawk: applet not found.
I can't reproduce this.
My /bin/gawk:
#!/usr/srcdevel/bbox/fix/busybox-1.17.2/ash
exec /bin/awk "$@"
My /bin/awk is from busybox 1.17.0.
It is invoked when I run bare "gawk" command:
# strace -oLOG gawk
BusyBox v1.17.0 (2010-07-06 15:21:06 CEST) multi-call binary.
Usage: awk [OPTIONS] [AWK_PROGRAM] [FILE]...
Options:
-v VAR=VAL Set variable
-F SEP Use SEP as field separator
-f FILE Read program from FILE
Here is the strace LOG:
execve("/bin/gawk", ["gawk"], [/* 33 vars */]) = 0
brk(0) = 0x8103000
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xf7741000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=57367, ...}) = 0
mmap2(NULL, 57367, PROT_READ, MAP_PRIVATE, 3, 0) = 0xf7732000
close(3) = 0
open("/lib/libm.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\0204\0"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=195898, ...}) = 0
mmap2(NULL, 151680, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xf770c000
mmap2(0xf7730000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x23) = 0xf7730000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0bl\1\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1487723, ...}) = 0
mmap2(NULL, 1227016, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xf75e0000
mmap2(0xf7706000, 12288, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x126) = 0xf7706000
mmap2(0xf7709000, 10504, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xf7709000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xf75df000
set_thread_area({entry_number:-1 -> 12, base_addr:0xf75df6c0, limit:1048575,
seg_32bit:1, contents:0, read_exec_only:0, limit_in_pages:1, seg_not_present:0,
useable:1}) = 0
mprotect(0xf7706000, 8192, PROT_READ) = 0
mprotect(0xf7730000, 4096, PROT_READ) = 0
mprotect(0xf775c000, 4096, PROT_READ) = 0
munmap(0xf7732000, 57367) = 0
getuid32() = 0
brk(0) = 0x8103000
brk(0x8124000) = 0x8124000
getpid() = 10138
rt_sigaction(SIGCHLD, {SIG_DFL}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGHUP, {SIG_DFL}, {SIG_DFL}, 8) = 0
getppid() = 10137
stat64("/.1/usr/srcdevel/bbox/fix/busybox-1.17.2", {st_mode=S_IFDIR|0755,
st_size=1704, ...}) = 0
stat64(".", {st_mode=S_IFDIR|0755, st_size=1704, ...}) = 0
open("/bin/gawk", O_RDONLY|O_LARGEFILE) = 3
fcntl64(3, F_DUPFD, 10) = 10
close(3) = 0
fcntl64(10, F_SETFD, FD_CLOEXEC) = 0
rt_sigaction(SIGINT, NULL, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {0x808644f, ~[RTMIN RT_1], 0}, NULL, 8) = 0
rt_sigaction(SIGQUIT, NULL, {SIG_DFL}, 8) = 0
rt_sigaction(SIGQUIT, {SIG_IGN}, NULL, 8) = 0
rt_sigaction(SIGTERM, NULL, {SIG_DFL}, 8) = 0
rt_sigaction(SIGTERM, {SIG_DFL}, NULL, 8) = 0
read(10, "#!/usr/srcdevel/bbox/fix/busybox"..., 1023) = 64
waitpid(-1, 0xffb58a38, WNOHANG) = -1 ECHILD (No child processes)
execve("/bin/awk", ["/bin/awk"], [/* 33 vars */]) = 0
<======================== here is the execve with correct argv[0]
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
getuid32() = 0
brk(0) = 0x8117000
brk(0x8118000) = 0x8118000
brk(0x8119000) = 0x8119000
old_mmap(NULL, 45056, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) =
0xf7743000
old_mmap(NULL, 401408, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) =
0xf76e1000
old_mmap(NULL, 81920, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, 0, 0) =
0xf76cd000
munmap(0xf76e1000, 401408) = 0
munmap(0xf7743000, 45056) = 0
write(2, "BusyBox v1.17.0 (2010-07-06 15:2"..., 42) = 42
write(2, " multi-call binary.\n", 20) = 20
write(2, "\nUsage: ", 8) = 8
write(2, "awk", 3) = 3
write(2, " ", 1) = 1
write(2, "[OPTIONS] [AWK_PROGRAM] [FILE].."..., 137) = 137
write(2, "\n\n", 2) = 2
_exit(1) = ?
--
vda
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox