如何直接将输出用作命令

时间:2017-05-19 15:20:27

标签: linux bash ubuntu

用这个grep它显示了我使用的命令:

ssh root@107.170.70.100

使用此输出:

import pandas as pd

d = pd.read_excel(r"excel_file.xlsx",index_col=[0,1]).to_dict(orient='index')
for key in d:
    d[key] = d[key].values()[0]

print d

我希望输出直接作为命令执行而不是打印。 我该怎么办?

3 个答案:

答案 0 :(得分:3)

原则上,这可以通过使用$()格式来完成,所以

$(history | grep "ssh root" | head -1| cut -c6-)

应该按照你的要求去做。但是,我不认为这样做是明智的,因为这将自动执行由grep产生的命令,所以如果你犯了错误,可能会发生很多坏事。相反,我建议在重新执行之前检查您的结果。 bash历史有很多很好的快捷方式来处理这类事情。举个例子,想象一下:

> history | grep "ssh root"
  756  ssh root@107.170.70.100

您可以通过键入

轻松地在第756行调用此命令
!756

这绝对更安全。希望这会有所帮助。

答案 1 :(得分:1)

理想情况下,您使用$(cmd)语法而不是`cmd`语法。这样可以更容易地嵌套子壳以及跟踪正在发生的事情。

除此之外,如果删除echo语句,它将运行脚本:

# Prints out ls
echo $( echo ls )

# Runs the ls command
$( echo ls )

答案 2 :(得分:0)

使用eval。

$ eval `history | grep "ssh root" | head -1| cut -c6-`

来自eval command in Bash and its typical uses

  

eval将一个字符串作为其参数,并对其进行评估,就像在命令行中键入该字符串一样。

Bash手册(https://www.gnu.org/software/bash/manual/html_node/Bourne-Shell-Builtins.html#Bourne-Shell-Builtins

  

EVAL

  eval [arguments]
     

将参数连接成一个命令,然后读取并执行该命令,并将其退出状态作为eval的退出状态返回。如果没有参数或只有空参数,则返回状态为零。