我知道C程序通常以return结束,我们返回程序的状态。 但是,我想返回一个字符串。原因是,我将从shell脚本调用C-executable并打印返回的字符串。 有没有相同的机制?
答案 0 :(得分:10)
没有这样的机制;返回码应该是一个字节。如果要从程序中输出字符串,请使用printf()
之类的命令和shell脚本中的命令替换来捕获它。
答案 1 :(得分:7)
你不能。
你能做的最好的事情就是在某处写字符串(标准输出,标准错误或某些文件);那么shellscript会从那里得到你的字符串。
标准输出(因此仅使用printf
)可能是最好的解决方案,因为从C程序打印字符串非常容易,而且shellcript很容易获得该数据:
来自shell脚本:
STRING="$( ./your_program argv1 argv2 )"
答案 2 :(得分:5)
无法从main()
返回字符串。也许程序本身应该打印字符串?
答案 3 :(得分:4)
只需使用printf
输出要返回标准输出的字符串。然后在您的脚本中,执行以下操作:
SOMESTRING="`./yourprogram`"
反引号将捕获程序的输出,这将是您打印的字符串。
答案 4 :(得分:1)
你不能,但你也不需要。您从main返回一个统计代码,但您始终可以重新定向输出并将其捕获到shell脚本中。
答案 5 :(得分:0)
你不能 - 你只能返回一个整数。
请记住,C是与Unix一起开发的。 Unix程序返回一个整数值,用作状态代码。如果一个程序要返回字符串,它会将它们写入stdout,然后用户(或脚本)将它传递给有用的东西。
MS DOS也只有数字状态值。
答案 6 :(得分:0)
您必须将字符串打印到stdout
并使用shell的命令替换来读取结果:
"`command`"
或:
"$(command)"
无论哪种方式,您都应该使用如上所述的封闭双引号。请注意,此方法存在一个潜在的严重问题,即它会从命令的输出中删除所有训练换行符。如果您需要保留确切的输出,请尝试:
output="$(command ; echo x)"
output="${output%x}"
由于OP提到这是一个密码,另一条建议是:一旦你将密码读入shell变量,永远不会在命令行上将它传递给其他程序。命令行通常是世界可读的。而不是像
那样的东西wget "http://$user:$pass@host/foo"
尝试类似
的内容wget -i - << EOF
http://$user:$pass@host/foo
EOF
此示例中的文件对于许多需要从脚本中获取密码的程序非常有用。