Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何从subshell获取标准输出?_Linux_Shell_Subshell - Fatal编程技术网

Linux 如何从subshell获取标准输出?

Linux 如何从subshell获取标准输出?,linux,shell,subshell,Linux,Shell,Subshell,我有这样的剧本 command='scp xxx 192.168.1.23:/tmp' su - nobody -c "$command" 主shell没有打印任何信息。 如何从sub命令获取输出?您实际上没有运行scp。当你使用 VAR=value cmd ... 语法,VAR=value设置进入cmd环境,但在当前shell中不可用。-c之后的命令为空,或者如果有,$command之前的值为空。只需重定向相应的输出通道即可获得其所有输出: command='scp ... ' su -

我有这样的剧本

command='scp xxx 192.168.1.23:/tmp'
su - nobody -c "$command"
主shell没有打印任何信息。
如何从sub命令获取输出?

您实际上没有运行scp。当你使用

VAR=value cmd ...

语法,
VAR=value
设置进入
cmd
环境,但在当前shell中不可用。
-c
之后的命令为空,或者如果有,
$command
之前的值为空。

只需重定向相应的输出通道即可获得其所有输出:

command='scp ... '
su - nobody -c "$command" > file

但是如果你没有看到任何东西,可能是scp的诊断输出被禁用了?
在你的真实命令中有一个“-q”选项吗?

它确实运行了,机器192.168.1.23可以接收文件。那么好吧,你必须已经设置了
$command
,或者你使用的shell(哪一个?)与我见过的任何shell都不一样。或者你真的有一个分号,你没有提到。在这种情况下,您希望得到什么样的输出?
var=$(su - nobody -c "$command")