有没有办法从bash脚本中执行编译后的C代码?
本质上,我希望从bash脚本中调用编译后的C代码。我希望能够从任何目录中调用./a.out并执行它 这一切都源于一些非常简单的事情。我制作了一个诅咒程序,它是终端的屏幕保护程序。我希望能够调用bash命令有没有办法从bash脚本中执行编译后的C代码?,c,bash,gcc,C,Bash,Gcc,本质上,我希望从bash脚本中调用编译后的C代码。我希望能够从任何目录中调用./a.out并执行它 这一切都源于一些非常简单的事情。我制作了一个诅咒程序,它是终端的屏幕保护程序。我希望能够调用bash命令screensaver,我希望通过bash调用c代码。我希望能够从文件系统中的任何位置调用它。我在2013年的Macbook上运行,但我认为这更多的是对C的不熟悉,而不是硬件问题,如果需要,我可以提供更多细节 文件如下: /Users/User/screensaver/screensaver.c
screensaver
,我希望通过bash调用c代码。我希望能够从文件系统中的任何位置调用它。我在2013年的Macbook上运行,但我认为这更多的是对C的不熟悉,而不是硬件问题,如果需要,我可以提供更多细节
文件如下:
/Users/User/screensaver/screensaver.c
cd/Users/User/screensaver
gcc屏幕保护程序.c
创建a.out
然后我就可以跑了
/a.out
代码运行
我试着打电话给/Users/User/screensaver/a.out
这不起作用,它只是说文件不存在。我尝试过使用exec
和source
,但没有任何效果。肯定有办法从别的地方叫它对吧?我知道理论上我可以将当前目录保存为一个环境变量,cd
保存到目录中,/a.out
,然后退出cd
返回保存的目录中,但这似乎需要付出很大的努力才能实现它的价值
编辑:我发现理论上我可以把它放在我的箱中
并用-o
编译。我没有试过,但我不想这样做,因为这段代码还在开发中,所以我不想每次都编译和移动它。这很有效:
“尝试调用/Users/User/screensaver/a.out,但不要在路径的开头添加点。当您位于保存可执行文件的目录中时,需要指定/a.out而不是a.out,这是一个特殊的安全原因。”
-齐奥诺这起作用了:
“尝试调用/Users/User/screensaver/a.out,但不要在路径的开头添加点。当您位于保存可执行文件的目录中时,需要指定/a.out而不是a.out,这是一个特殊的安全原因。”
-tshioo您只需要在路径中放置/Users/User/screensaver,尝试调用
/Users/User/screensaver/a.out
,而不在路径的开头添加点。当您在保存可执行文件的目录中时,需要指定/a.out
而不是a.out
有一个特殊的安全原因。将二进制文件粘贴在路径中或使用指向它的绝对路径。为什么要从bash脚本调用它,而不是直接调用已编译的二进制文件?正如其他人所指出的,如果希望能够从任何地方调用二进制文件,则需要将其位置添加到PATH
环境变量中,或者需要将二进制文件从PATH
移动到现有目录中。此外,我建议将其重命名为a.out
以外的名称。更好的是,在/usr/local/bin
中创建一个指向a.out
的符号链接(当然重命名为一个健全的名称),这应该是大多数发行版的默认搜索路径。(你必须检查Mac,我没有办法,但我怀疑它在那里)。您可能需要超级用户执行ln-s/path/to/a.out/usr/local/bin/
。此外,-o
选项只是告诉编译器将编译后的代码输出到-o
后面的名称(而不是默认的a.out
)。因此,gcc-o screensaver screensaver.c
(将创建可执行的screensaver
,而不是a.out
)您只需将/Users/User/screensaver放在路径中,尝试调用/Users/User/screensaver/a.out
,而不在路径的开头加一个点。当您在保存可执行文件的目录中时,需要指定/a.out
而不是a.out
有一个特殊的安全原因。将二进制文件粘贴在路径中或使用指向它的绝对路径。为什么要从bash脚本调用它,而不是直接调用已编译的二进制文件?正如其他人所指出的,如果希望能够从任何地方调用二进制文件,则需要将其位置添加到PATH
环境变量中,或者需要将二进制文件从PATH
移动到现有目录中。此外,我建议将其重命名为a.out
以外的名称。更好的是,在/usr/local/bin
中创建一个指向a.out
的符号链接(当然重命名为一个健全的名称),这应该是大多数发行版的默认搜索路径。(你必须检查Mac,我没有办法,但我怀疑它在那里)。您可能需要超级用户执行ln-s/path/to/a.out/usr/local/bin/
。此外,-o
选项只是告诉编译器将编译后的代码输出到-o
后面的名称(而不是默认的a.out
)。因此gcc-o screensaver screensaver.c
(将创建可执行的screensaver
,而不是a.out
)PATH
环境变量告诉shell要查找要执行的程序的各个位置,如果您没有为该程序指定路径的话。因此,您可以将/Users/User/sceensaver
添加到路径
。或者,您可以指定路径。调用/Users/User/screensaver/a.out
是一个完整路径,而/a.out
表示在当前目录中运行a.out
/Users/Users/screensaver/a.out
意味着从当前目录开始,而不是从文件系统根目录(/
)来查找文件,这不是您在本例中想要的。@Perette那么,您是说添加到路径而不是CALI有性能优势吗