当前位置: 首页 > 面试题库 >

如何在Linux中从C执行Shell脚本?

李星波
2023-03-14
问题内容

如何在Linux中从C执行Shell脚本?


问题答案:

这取决于您要对脚本(或要运行的任何其他程序)执行的操作。

如果只想运行脚本,这system是最容易的事情,但是它也做其他一些事情,包括运行shell并让其运行命令(在大多数* nix下是/ bin
/ sh)。

如果您要通过标准输入来输入shell脚本或使用其标准输出,则可以使用popen(和pclose)设置管道。这也使用外壳程序(大多数* nix下是/
bin / sh)来运行命令。

这两个都是库函数,它们在幕后发挥了很多作用,但是如果它们不能满足您的需求(或者您只是想尝试和学习),那么您也可以直接使用系统调用。这也使您避免让shell(/
bin / sh)为您运行命令。

感兴趣的系统调用forkexecvewaitpid。您可能要使用其中一种库包装器execve(类型man 3 exec为它们的列表)。您可能还想使用其他等待功能之一(man 2 wait全部包含)。此外,您可能会对系统调用感兴趣,clone并且vfork这些调用与fork有关。

fork复制当前程序,唯一的不同是新html" target="_blank">过程从fork的调用返回0。父进程获取返回的新进程的进程ID(或错误)。

execve 用新程序替换当前程序(保持相同的进程ID)。

waitpid 由父进程用于等待特定的子进程完成。

将fork和execve步骤分开可以使程序在创建新流程之前对其进行一些设置(而不会弄乱自己)。这些措施包括将标准输入,输出和stderr更改为与所使用的父进程不同的文件,更改进程的用户或组,关闭子进程不需要的文件,更改会话或更改环境变量。

您可能还对pipedup2系统调用感兴趣。 pipe创建一个管道(具有输入文件描述符和输出文件描述符)。
dup2将文件描述符复制为特定文件描述符(dup类似,但将文件描述符复制到最低可用文件描述符)。



 类似资料:
  • 问题内容: 我有一个Windows从站,安装了bash。我正在尝试在其上运行Shell脚本作为预构建步骤。关于如何执行此操作的任何想法? 问题答案: 您需要使用脚本作为参数运行bash: 您可能还需要根据环境提供完整的bash路径。

  • 问题内容: 我保留一个名为的shell脚本文件 ,并从构建中执行该文件。 当我执行构建时,它失败。 控制台输出如下: 我在应该保留外壳脚本文件以便执行的位置上感到困惑。 问题答案: 如果看到错误消息,则提示 在工作空间中构建/ var / lib / jenkins / workspace / AutoScript 并根据您的评论将urltest.sh放入 / var / lib / jenkin

  • 问题内容: 我需要从Django Shell执行Python脚本。我试过了: 但这没有用。只是在等我写东西。 问题答案: 该<<部分有误,请<改用: 你也可以这样做: 对于python3,你需要使用

  • 我需要从Django shell执行一个Python脚本。我试过: 但是没有成功。它只是在等我写些什么。

  • 问题内容: 我尝试谷歌搜索答案,但没有运气。 我需要使用我的超级计算机服务器,但是要运行我的python脚本,必须通过shell脚本执行。 例如我要执行 如何做到这一点? 问题答案: 只需确保python可执行文件在PATH环境变量中,然后在脚本中添加 细节: 在文件job.sh中,放入 执行此命令以使脚本可运行: 运行 :

  • 问题内容: 如何通过外壳程序脚本执行SQL命令,以使其自动化? 我想使用外壳程序脚本恢复在SQL文件中收集的数据。我想连接到服务器并还原数据。通过SSH命令行单独执行时,该命令有效。 这是我使用的命令: 这是创建文件并将其通过管道传递到mysql 的Shell脚本代码。 正确的方法是什么? 问题答案: 您需要使用该标志来发送密码。这很棘手,因为您和密码之间必须没有空格。 如果在空格之后使mysql