我需要知道控制台中的下一个空闲行(Ubuntu),所以我用C++编写了此代码

using namespace std;
#define SCRIPTGETNEXTLINE "#!/bin/bash \n\
echo -en \"\\E[6n\"\n\
read -sdR CURPOS
CURPOS=${CURPOS#*[}\n\
CURPOS=$(echo $CURPOS | cut -d ';' -f 1)\n\
echo $CURPOS"

int main (){
    system(SCRIPTGETNEXTLINE);
    return 0;
}

但是我得到了错误:
sh: 2: read: Illegal option -s

在脚本中这有效
#/bin/bash
echo -en "\E[6n"
read -sdR CURPOS
CURPOS=${CURPOS#*[}
CURPOS=$(echo $CURPOS | cut -d ';' -f 1)
echo $CURPOS

有人可以帮我吗?

最佳答案

-s选项由readbash命令理解,但是您正在sh下运行它,并且Posix shell的read不知道-s。注意,在这种情况下,#!行将被忽略,因为您将整个命令作为字符串传递。

我建议您将脚本写入文件x,然后通过以下方式执行文件:

system("bash x")

然后将在终端显示变量CURPOS的值。

关于c++ - 为什么C++中的Shell脚本代码不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49440207/

10-11 16:58