我如何用猫编程?

Spa*_*gus 23 bash command-line code-golf

在这个xkcd漫画中: 真正的程序员

他们提到真正的程序员使用cat.好吧,我问自己:你怎么能用这个cat命令编程?

cha*_*aos 56

$ cat > hello.c
#include <stdio.h>

main(void) {
    printf("Hello, world.\n");
}
^D
$ gcc hello.c
$ ./a.out
Hello, world.
Run Code Online (Sandbox Code Playgroud)

  • 当然,真正的程序员使用"cat> a.out" (41认同)
  • ...因为真正的程序员第一次就做对了. (31认同)
  • 我倾向于使用cat>在小型测试程序中进行第一次传递,因为标准的Solaris vi是邪恶的.vi的诱惑是纠正你的错误,这是一个错误,因为光标键将被解释为转义序列并造成混乱. (6认同)
  • @Tom Hawtin:显然你需要扮演更多的Rogue,将hjkl运动键锁定在你的神经系统中. (2认同)

Ale*_*lli 37

不,echo显然更好:

echo 'main(){puts("Hello world\n");}'  | gcc -xc -
Run Code Online (Sandbox Code Playgroud)

即使你想使用cat(猫科动物毕竟是美妙的),为什么还要把源放到磁盘上呢?只需将cat输出重定向到编译器,就像在这种echo情况下一样.

  • 而且你有.bash_history的内置版本控制! (41认同)
  • 太糟糕的bash无法执行来自管道的可执行文件,否则你可以在不保存编译器输出的情况下执行此操作,例如"echo ... | gcc -xc - -o - | execute-stdin-command" (3认同)

Ste*_*ini 6

gcc?真正的程序员使用cat xxd:

$ cat | xxd -r > a.out
0000000: cefa edfe 0700 0000 0300 0000 0200 0000  ................
0000010: 0b00 0000 a803 0000 8500 0000 0100 0000  ................
0000020: 3800 0000 5f5f 5041 4745 5a45 524f 0000  8...__PAGEZERO..
0000030: 0000 0000 0000 0000 0010 0000 0000 0000  ................
<lot of other stuff>
0003090: 0a00 0000 0b00 0000 2000 6479 6c64 5f73  ........ .dyld_s
00030a0: 7475 625f 6269 6e64 696e 675f 6865 6c70  tub_binding_help
00030b0: 6572 005f 5f64 796c 645f 6675 6e63 5f6c  er.__dyld_func_l
00030c0: 6f6f 6b75 7000 6479 6c64 5f5f 6d61 6368  ookup.dyld__mach
00030d0: 5f68 6561 6465 7200 5f4e 5841 7267 6300  _header._NXArgc.
00030e0: 5f4e 5841 7267 7600 5f5f 5f70 726f 676e  _NXArgv.___progn
00030f0: 616d 6500 5f5f 6d68 5f65 7865 6375 7465  ame.__mh_execute
0003100: 5f68 6561 6465 7200 5f65 6e76 6972 6f6e  _header._environ
0003110: 005f 6d61 696e 0073 7461 7274 005f 6578  ._main.start._ex
0003120: 6974 005f 7075 7473 0000 0000            it._puts....
^D
$ chmod 755 ./a.out
$ ./a.out
Hello, world.
Run Code Online (Sandbox Code Playgroud)

顺便说一句,我不知道这0xFEEDFACE是Mach-O二进制文件中的神奇数字......很酷.