【问题标题】:making sym link to executable file使符号链接到可执行文件
【发布时间】:2018-10-21 07:21:54
【问题描述】:

我有一个 shell 脚本 compileRun 编译和执行 C 源文件。

#!/bin/sh
gcc bar.c -o ./bar
./bar

我真正希望实现的是当我们

ln -s compileRun bar.c
./bar.c

我希望 bar.c 被编译和执行。 感谢您的帮助。

【问题讨论】:

  • 您希望创建符号链接 隐式运行编译过程吗?是什么让您相信这是可能的?
  • 坦率地说,任何允许它的操作系统都会从安全角度做出有问题的决定,因为有人链接到文件通常不会期望他们这样做重新隐式运行任意代码。原则上,执行任意代码作为副作用是危险的。
  • ...也就是说,如果您希望 bar.c 本身是可执行的,那么 实际上是可能的,只是不使用 gcc。请参阅wiki.archlinux.org/index.php/Tcc,启用#!/usr/bin/tcc -run shebang。

标签: c shell unix


【解决方案1】:

我明白 OP 想要什么。

只有当源文件显式存储在与符号链接不同的位置时,以下操作才有效。可以在 bash 脚本中为 $0 添加路径。

您应该在 bash 脚本中将 somefile.c 替换为 $0

这个特殊的 shell 表达式返回当前正在执行的文件的名称。在你的情况下,bar.c

例如:

ln execute_c_file my_file.c
./my_file.c

如果 my_file.c 是一个正在运行的 bash 脚本,$0 将评估为 my_file.c

我建议您编辑您的问题以清除代码的语义/含义。

【讨论】:

  • 这几乎解决了我的问题,但问题是 $0 是 ./myfile 格式。
  • 它仅在源与符号链接不在同一目录中时才有效。
  • @Samun 您可以在./file 前面添加绝对路径。像/home/./file 等价于/home/file
猜你喜欢
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
相关资源
最近更新 更多