19 comments

[ 2.9 ms ] story [ 41.8 ms ] thread

    while read line; do
        echo $line>>$cfile
    done
Okay, I know this is a joke and all, but that's the exact wrong way to do it. What you want to do is just

    cat > $cfile
> Has you ever wanted to combine the speed and safety of Bash with the raw, unbridled power of C?

Uh, no? :)

The insane things people do in Bash sometimes...although I don't think anything can top the x86 Assembler that was written entirely in Bash:

http://lists.gnu.org/archive/html/bug-bash/2001-02/msg00054....

why ....
Click the link, and you're just a few spacebar presses away from answering that question for yourself (it's a few paragraphs down).
> It just continuously cracks me up.

My favourite of the listed reasons.

to call this an assembler is to not give it credit where it's due - this is not an assembler, it's much more than that.

it's a set of functions for bash that when sourced make the assembly a valid bash script which then runs and assembles itself. this is genius.

It's using the shell's own tokenizer to parse asm! That's glorious!

I don't really understand why the code works since I can't read x86 asm yet, but I think how it works is reasonably clear. Each instruction has its own bash function that writes its opcodes to the output file and the asm script to be assembled is (I think) sourced directly into the running shell session.

Could he not remove the temp files and use process substitution instead? (looks cleaner in my opinion)

i.e:

cc -fPIC -o $sofile -shared <(cat <<'EOF'

...

EOF

)

That's some nice useless use of cat you have there ;) . You can just do

    cc -fPIC -o $sofile -shared -x c - <<'EOF'
    ...
    EOF
I once built a package to allow redistribution of C/Flex/Go-scripts with just-in-time compilation (https://github.com/radiospiel/jit) but mine does not allow to mix the to-be-compiled language into the bash script itself; so count me impressed :)
I used to write CGI in shell scripts. OK, it was the mid 1990s.
(comment deleted)