我有一个用C / C ++编写的程序,它读取两个文件,然后生成一些报告。典型的工作流程如下:
1> scp user@server01:/temp/file1.txt ~/ then input my password for the prompty
2> my_program file1.txt localfile.txt
有没有办法让我的程序直接处理远程文件而不先将文件显式复制到本地?我尝试了以下命令,但它对我不起作用。
> my_program <(ssh user@server01:/temp/file1.txt) localfile.txt
答案 0 :(得分:8)
您需要使用ssh user@host "cat /temp/file.txt"
。
您可以使用它将其重定向到程序的stdin:ssh user@host "cat /temp/file.txt" | my_program
或者您可以使用fork / exec在程序中实际调用它。或者就像你描述的那样生成一个临时文件:my_program <(ssh user@host "cat /temp/file.txt")
其他选项是在程序中使用带保险丝的sshfs或使用ssh(或VFS)库。
答案 1 :(得分:2)
如果你真的在Red Hat Linux上,这应该可行:
ssh user@host cat /temp/file1.txt | my_program /dev/stdin localfile.txt
使用单个-
代替/dev/stdin
也可以正常工作,但这取决于是否编写了my_program
来解释-
的参数为&#34 ;从stdin&#34;。
此外,如果my_program
期望能够在第一个文件中寻找(I / O流通常是不可搜索的),这可能不起作用,但如果它只是从第一个字节读取到最后一个字节,应该没问题。