popen()函数在结果末尾是否添加换行符(\n)?

我编写了一个小函数,返回执行命令的结果。

function axsh(cmd)
    local fullCmd=cmd:lower()
    local f,err=io.popen(fullCmd,"r")
    if not f then
        return nil,"无法创建进程'"..fullCmd.."' \n错误:"..err
    end
    return f:read("*all")
end

s=axsh("echo hi")
--打印所有字节
print(s:byte(1,s:len()))

无论命令是什么,输出始终在结尾处都有一个\n:

104 105 10

编辑:不仅是我的二进制命令行应用程序,而且几乎所有操作系统命令都会出现这种情况:Windows:"dir"、"ipconfig"、"echo"... Linux:"ls"、"pwd"、"ls"...

但是,当我单独运行命令时(即Windows命令提示符),就没有尾随换行符了。我不需要它,所以在返回结果之前需要删除最后一个字符。

问题:在popen()的结果中,这个换行符是否总是存在?我在文档中找不到任何有关这种行为的参考。

原文链接 https://stackoverflow.com/questions/7305587

点赞
stackoverflow用户513763
stackoverflow用户513763

不行,io.popen 只返回命令输出的字符串。你使用了 echo 命令,它会在字符串后面添加一个换行符(这就是使命令提示符出现在下一行的原因,而不是紧跟在输出后面)。

你可以通过使用以下代码来测试它:

s=axsh([[lua -e "io.write([=[hi]=])"]])
return string.byte(s,1,-1)

这段代码不会在输出的末尾添加换行符。

2011-09-05 09:15:50