[英]Send some arguments (like Ctrl-C, 3, some_string), to program, from bash script
[英]How to send a string in bash script to a c program and use that string
我需要使用bash脚本将字符串发送到C程序,然后将该字符串放入C程序并对其进行处理。 问题是我不知道如何使用字符串。 我尝试使用printf来查看c程序实际上得到了什么,并打印出了随机数。
这是bash脚本:
length=`/home/hellboy632789/linelength $line`;
这是C程序:
int main(int argc, char *argv[])
{
int length;
char *string = argv[1];
for(length = 0; string[length] != '\0'; length++);
printf("%d\n", length);
return(0);
}
我对C相当陌生,但是任何帮助将不胜感激。
您将返回字符串的长度作为C程序的退出代码。 Bash使退出代码在变量$?
可用$?
。
另一方面,您的bash脚本会将C程序要打印到stdout的内容放入“ length”变量中,这根本不是同一回事。
由于通常在程序正确执行的情况下退出代码为0,在出现错误的情况下退出代码为非零,因此按原样使用bash脚本并更改C代码更有意义。
替换return(length);
与printf("%d\\n", length);return(0);
并且您的程序应该可以按照您的意愿工作。 您可以通过在bash命令提示符处运行/home/hellboy632789/linelength testtestwhatever
进行任何测试。
当然还有许多其他方法,但是我想这只是迈向更复杂事物的第一步。 祝你好运和恒心。
编辑:例如,这有效:
~/316643$ cat linelength.c
#include <stdio.h>
int main(int argc, char *argv[])
{
int length;
char *string = argv[1];
for(length = 0; string[length] != '\0'; length++);
printf("%d\n", length);
return(0);
}
~/316643$ gcc -o linelength linelength.c
~/316643$ ./linelength qwertyui
8
~/316643$ line="qwerty uiop"
~/316643$ length=`./linelength "$line"`
~/316643$ echo "length is $length bytes"
length is 8 bytes
~/316643$
编辑2:Bash会在空格处分割所有遵循命令行linelength
的内容,除非您使用反斜杠保护空格或将字符串括在引号中。 对于带空格的参数,有两种选择,要么像这样保护空格:
~/316643$ line="qwerty uiop"
~/316643$ ./linelength "$line"
length is 12 bytes
~/316643$
请注意,这将计算空格。
否则,您将修改C程序以计算所有argv [i],其中i从1到argc-1。 那不会计算空格,因此您将不知道单词之间是否有多个空格。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.