如何通过符号链接使C源文件触发compileRun脚本完成编译运行?
解决方案:让符号链接自动编译运行对应的C文件
我懂你的需求——你想通过创建符号链接指向compileRun脚本,运行这个链接时,自动编译对应的C源文件并执行它。你的原脚本问题在于硬编码了bar.c,不管运行哪个链接,它只会编译固定的文件,咱们来修改脚本解决这个问题:
修改后的compileRun脚本
#!/bin/sh # 获取当前运行的链接所指向的真实C源文件路径 SOURCE_FILE=$(readlink -f "$0") # 提取源文件的文件名(不带路径) FILENAME=$(basename "$SOURCE_FILE") # 生成可执行文件的名字(去掉.c后缀) EXECUTABLE=$(echo "$FILENAME" | cut -d. -f1) # 编译C源文件 gcc "$SOURCE_FILE" -o "./$EXECUTABLE" # 检查编译是否成功,成功则运行可执行文件 if [ $? -eq 0 ]; then echo "编译成功,正在运行..." ./"$EXECUTABLE" else echo "❌ 编译失败,请检查$SOURCE_FILE中的代码错误" fi
关键步骤解释
readlink -f "$0":$0代表当前运行的脚本/链接的路径,readlink -f会解析出它指向的真实文件绝对路径——比如你运行./bar.c这个链接,它会返回实际的bar.c源文件路径。basename "$SOURCE_FILE":把路径部分去掉,只保留文件名(比如/home/you/code/bar.c变成bar.c)。cut -d. -f1:切割文件名,去掉.c后缀,得到可执行文件的名字(比如bar.c变成bar)。- 编译后加入状态检查:如果
gcc返回的状态码是0(编译成功),才运行生成的可执行文件,避免编译失败后执行不存在的程序。
正确使用方法
- 给修改后的脚本添加执行权限:
chmod +x compileRun - 创建符号链接(注意命令顺序:
ln -s 源脚本 目标链接):ln -s ./compileRun ./bar.c - 现在运行链接就能自动编译执行了:
./bar.c
额外提示
- 如果你的C代码需要额外编译参数(比如链接第三方库),可以在
gcc命令里添加,比如链接数学库:gcc "$SOURCE_FILE" -o "./$EXECUTABLE" -lm。 - 可执行文件默认生成在当前目录,如果你不想污染目录,可以把输出路径改成临时目录,比如
/tmp/$EXECUTABLE。
内容的提问来源于stack exchange,提问作者Samun
相关产品推荐
相关产品推荐

