OSX:C 程序执行后仍留在终端

OSX:C 程序执行后仍留在终端

第二次编辑

一些澄清...

我编写了一个要求输入的 C 程序(在本例中,使用fgets())。当我将其编译为 C 可执行文件时,我注意到以下行为:

如果我从终端运行可执行文件,如下所示:~$ ./program_name显然,终端会话在该过程完成后将继续。像往常一样,我看到一个空白的命令行:~$

但是,如果我通过双击 C 可执行文件来运行可执行文件,则会出现一个终端,我可以按照程序的要求输入数据。输入数据后,进程结束,显示“终端”,[Process completed]并且终端显然无法使用。

当我在 OSX 中运行允许终端输入的 C 可执行文件(fgets()例如通过)时,输入信息后会出现消息[Process completed],并且终端似乎无法使用。这对于我的目的来说很不方便。

问题: 假设我在没有打开终端的情况下运行它。所以我双击了该程序。

  • 有没有办法在执行 C 程序后留在终端通过命令行输入

    • 我的程序要求输入,所以我可以给它输入可以echo在 shell 中输入的内容... 有什么方法/命令可以保留在终端中吗?生成一个新的终端是一种选择,但它远的不太理想。
  • 有没有办法留在终端通过改变我的 C 程序?

附加问题: 是否有一个终端命令可以生成一个新的终端窗口?

欢迎提出各种想法...!我有一些想法,但还没有令人满意的。

答案1

[Process completed]是终端会话结束时(即不再有与 tty 关联的进程)终端写入终端显示的内容。这表示程序已退出,并且您没有从交互式 shell 启动终端会话。

有多种方法可以在终端中执行命令而无需手动与 shell 交互,其中包括:

  1. 选择Shell > 新命令菜单项并输入命令。离开在 shell 中运行命令复选框未选中。您的程序将直接执行,无需 shell。如果您打开 Inspector 窗口并查看 Info 窗格,您将看到进程列表仅列出“login”和您的命令,但没有 shell。

  2. 从 Finder打开一个*.command文件。终端将启动一个 shell 并告诉它执行命令文件,然后退出。您将看到一个 shell 提示符,后面跟着一个命令,如下所示:/path/to/your/file.command ; exit;。同样,如果您查看检查器,进程列表将包括“登录”、您的 shell 和您的命令可执行文件。(如果您选择在 shell 中运行命令在里面新命令控制板。)

听起来你正在使用 #2。没有办法改变你的程序,让 shell 在程序退出后保持交互;但是,有几种间接的方法可以让终端运行命令,然后为你留下一个交互式 shell:

  1. 创建一个在交互式 shell 中运行命令的设置配置文件:

    1. 首选项 > 设置使用配置文件列表底部的操作(齿轮)菜单复制默认配置文件。
    2. 前往窗格并选择运行命令:
    3. 输入命令文件的路径名。
    4. 选择在 shell 中运行
    5. *.terminal使用以下方式将设置配置文件导出到文件:出口命令,或者将其从配置文件列表拖到 Finder。

    然后,每当您想要创建一个通过运行程序启动的新 shell 时,请打开该*.terminal文件。您也可以在终端内使用此配置文件打开一个新终端,方法是使用外壳 > 新窗口[或 Tab] 菜单,或者双击配置文件列表中的配置文件。

  2. 编写一个 AppleScript,指示终端运行您的命令,就像您将其输入到命令行一样。然后,您可以将脚本存储在系统范围的脚本菜单中并从那里调用它,也可以将脚本保存为可以运行的应用程序。例如,该脚本如下所示:

    tell application "Terminal"
        activate
        do script "/path/to/your/file.command"
    end tell
    

相关内容