脚本

C++ 的脚本化:

自动编译和运行程序

原文出自这里: 神奇,C代码竟然能当成shell脚本一样“直接”执行!

但是很可惜,作者虽然很有探索精神,但是由于细节不到位,导致后来的代码冗余很多。

比如 shell 脚本第一行开头并没有严格的规定,写一个 “#!”只是为了指定解释器,而大部分linux发行版都是默认 bash 的。

这意味这脚本是从上向下执行的。使用绝对路径定位时,连续的 “//” 是被看作一个的,也就是说

“/usr/bin/bash” 和 “//usr/bin/bash” 是相同的

而第二种形式正是 C++ 的行注释

如此,得到:

//usr/bin/gcc -o main "$0" && ./main &&exit
#include<stdio.h>

int main(){
   printf("hello, world");
   return 0;
}

命令如果不放到一行的话,每一行都需要指定路径:

//usr/bin/gcc -o main "$0"
//`pwd`/main && exit
#include<stdio.h>

int main(){
   printf("hello, world");
   return 0;
}

由于 exit 是 bash 的内建命令,因此只能和带路径的命令放在同一行