Linux

通過 ssh 從另一台伺服器獲取此命令的輸出

  • October 10, 2018

我正在嘗試 ssh 進入伺服器並使用特定命令獲取系統正常執行時間,但它無法執行。

這將在幾乎所有 Unix 系統上本地工作

startuptime=`uptime | awk '{print $2,$3,$4,$5}'` && startuptime1=${startuptime%,} && startdayshours=${startuptime1%%:*}' Hours, ' && startminutes=${startuptime1##*:}' Minutes' && echo 'System Uptime -' $startdayshours$startminutes `date`

但是如果我這樣做,它將不起作用(無論我如何更改/添加轉義字元或 $() 或 `` 或 ’ " ’ " ’ 引號等)

ssh user@server "startuptime=`uptime | awk '{print $2,$3,$4,$5}'`; startuptime1=${startuptime%,}; startdayshours=${startuptime1%%:*}' Hours, '; startminutes=${startuptime1##*:}' Minutes'; echo 'System Uptime -' $startdayshours$startminutes `date`"

PS:我知道它不適用於引號,因為我需要轉義內部引號,但這只是一個例子ssh user@server command_goes_here

您的命令中有反引號。這意味著它們在 ssh 命令之前執行。此外,您正在 ssh 命令中進行分配。但是,您對該任務沒有做任何事情。因此,ssh 可能會將垃圾分配給您從不使用的啟動時間變數。

您真正想要的只是遠端伺服器上 uptime 命令的輸出。然後,您可以通過本地 awk 和其他東西通過管道傳輸它以獲得您想要的東西。

ssh user@server uptime | awk '{print $2, $3, $4, $5}'

如果這對您有用,那麼您可以添加其餘命令。

你甚至可以做

startuptime=$(ssh user@server uptime)
echo startuptime | awk '{print $2, $3, $4, $5}'

如果您想在本地對該刪除值進行進一步處理。

引用自:https://unix.stackexchange.com/questions/474533