bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

"." (aka source) works only with regular files


From: stephane_chazelas
Subject: "." (aka source) works only with regular files
Date: Sat, 30 Sep 2006 23:14:16 +0100

Configuration Information [Automatically generated, do not change]:
Machine: i486
OS: linux-gnu
Compiler: gcc
Compilation CFLAGS:  -DPROGRAM='bash' -DCONF_HOSTTYPE='i486' 
-DCONF_OSTYPE='linux-gnu' -DCONF_MACHTYPE='i486-pc-linux-gnu' 
-DCONF_VENDOR='pc' -DLOCALEDIR='/usr/share/locale' -DPACKAGE='bash' -DSHELL 
-DHAVE_CONFIG_H   -I.  -I../bash -I../bash/include -I../bash/lib   -g -O2
uname output: Linux sc 2.6.17.11 #1 PREEMPT Sun Sep 24 13:29:05 BST 2006 i686 
GNU/Linux
Machine Type: i486-pc-linux-gnu

Bash Version: 3.1
Patch Level: 17
Release Status: release

Description:
        $ echo echo echo | bash -c '. /dev/fd/0'
        $ echo echo echo | zsh -c '. /dev/fd/0'
        echo
        $ echo echo echo | ksh -c '. /dev/fd/0'
        echo
        $ echo echo echo | ash -c '. /dev/fd/0'
        echo
        $ echo echo echo | posh -c '. /dev/fd/0'
        echo

        Same problem if you do a ". fifo".


        $ echo echo echo | strace bash -c '. /dev/fd/0'
        [...]
        stat64("/dev/fd/0", {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
        open("/dev/fd/0", O_RDONLY|O_LARGEFILE) = 5
        fstat64(5, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
        read(5, "", 0)                          = 0
        [...]

        The problem being that bash does a stat on the file, and reads
        st_size bytes from the file only, instead of reading til eof.


Repeat-By:
        echo echo echo | bash -c '. /dev/fd/0'

Fix:
        Not use stat(2).

        I think the file should be read the same way as standard input
        is read.

        Like

        echo 'echo echo echo >> a' > a
        . ./a

        should output "echo". (It does with ash, pdksh and zsh, not with
        AT&T ksh). SUSv3 is not specific on that case.

-- 
Stephane




reply via email to

[Prev in Thread] Current Thread [Next in Thread]