2016-07-11 22 views
1

我的Windows機器上有一個.bat文件。此.bat文件使用plink.exe連接到Ubuntu機器並執行.sh腳本。不過,我對劇本得到不同的行爲取決於的Plink如何使用:腳本通過.bat中的.bat行爲有所不同

  1. 登錄到Ubuntu的直接(親自) - 腳本通過Bitvise客戶成功

  2. SSH - 腳本成功通過的Plink

  3. SSH(通過調用plink.exe)和交互shell腳本調用(它的Windows cmd.exe內的Ubuntu的外殼) - SC RIPT經由.bat然後調用的Plink成功

  4. SSH - 腳本失敗

的腳本失敗瓦特/消息:

錯誤而載入共享庫:libCint.so :無法打開共享目標文件:無此文件或目錄

其他帖子似乎指的是libCint.so的安裝/權限問題,但我知道情況並非如此,因爲腳本在其他實例中正常工作,如上所示。

下面是我.bat文件plink.exe行:

plink.exe !plink_ssh_details! myscript 

上述腳本未能通過所謂的文件.bat這種方式時;再次請注意,它直接從Ubuntu或通過cmd.exe(使用plink.exe)或Bitvise客戶端將I -ssh直接調入Ubuntu時成功。任何幫助,將不勝感激。

回答

1

在其他情況下,您正在使用交互式會話。

雖然默認情況下Plink使用非交互式會話,但在其命令行上指定命令時。

您的腳本可能依賴於某些環境變量(如PATH)被專門設置。

很可能變量只設置爲交互式會話。可能是因爲它們是在僅爲交互式會話執行(源代碼)的啓動腳本中進行修改的。

解決辦法是:


SOEM更模糊SSH服務器也可以表現不同,當「EXEC」信道被用來執行該命令。見Plink : does not execute command

+0

感謝馬丁 - 關於環境變量,我不得不修改$ PATH,因此所有必需/遞歸調用的函數/腳本都在非交互式會話中可見。你認爲其他什麼環境變量可能會導致這個錯誤? –

0

我不得不破解一個解決方案來解決這個問題。在bash腳本我是從我的.bat文件調用的頭部添加一個「-i」選項的伎倆:

#!/bin/bash -i 

注意一些警告的不必要的副作用(沒有具體提及壽...)當使用這個選項。但是,從遠程ssh會話中調用此交互式腳本(例如,使用Windows .bat文件中的plink.exe並將內聯命令傳遞給Unix框)可以解決有關文件/目錄可見性&權限問題的任何問題。對於plink用戶的注意事項:如果你通過plink在Unix上調用一個腳本並注意到腳本沒有像預期的那樣工作......添加「-i」可能有助於調試/解決你的問題。同樣,請注意,有些人聲稱他們/我不知道這種黑客的不良副作用。

+0

在我的問題鏈接中提到了副作用(但只提到了一些,可能的問題範圍是無限的)。甚至很明顯,「交互式」會話(-i)不應該用於自動化任務。 –

+0

馬丁 - 不確定你指的是哪個鏈接。迄今爲止我還沒有看到任何副作用。您能澄清包含 -i在.sh腳本標題中的副作用的鏈接嗎? –

+0

我的答案中只有一個鏈接。它描述了許多可能的副作用中的兩個(輸出中的ANSI序列和輸出中的命令提示符)。 –