C语言system()命令在MSYS2中无响应,如何切换至MSYS2终端?
问题与解决方案:MSYS2中system()调用无输出的问题
问题描述
我是C语言新手,以下是我的代码:
#include <stdio.h> #include <stdlib.h> int main() { int input; setvbuf(stdout, NULL, _IONBF, 0); printf("Welcome to example"); printf("\n" "Select an option." "\n" "1. ex1" "\n" "2. ex2" "\n"); scanf("%d", &input); if (input == 1) { printf ("You selected ex1."); system("echo 'testing.'"); } else if (input == 2) { printf ("You selected ex2."); } return 0; }
在MSYS2环境中通过./a.exe运行该可执行文件,输入1后,程序仅显示:
You selected ex1.
随后直接结束,system("echo 'testing.'")的预期输出完全没出现。猜测是system()默认调用Windows命令提示符(CMD),而当前CMD存在问题,想知道如何切换为使用MSYS2终端执行该命令。
解决方案
在MSYS2环境下,system()默认会调用Windows的CMD解释器,要让它改用MSYS2的bash终端执行命令,有以下几种方式:
直接调用bash执行单条命令
修改system()的参数,让bash来执行目标命令:system("bash -c \"echo 'testing.'\"");这里
bash -c是告诉bash执行后续引号内的命令,内层引号需要用\"转义,避免和外层引号冲突。指定bash完整路径(可选)
如果bash不在系统PATH中,可以直接写完整安装路径,比如默认安装在C:/msys64的情况下:system("C:/msys64/usr/bin/bash -c \"echo 'testing.'\"");路径可根据你的实际安装位置调整。
全局修改默认解释器
要是希望所有system()调用都默认用MSYS2的bash,可以修改环境变量COMSPEC:
在MSYS2终端中执行:export COMSPEC=/usr/bin/bash这个设置仅在当前终端会话有效,要永久生效可以把这条命令添加到MSYS2的
~/.bashrc配置文件中。
内容的提问来源于stack exchange,提问作者user16194927
相关产品推荐
相关产品推荐

