2016-07-31 123 views
0

我在包含不在默認路徑上的命令的服務器上有bash腳本。通過JSch執行腳本時將目錄添加到PATH CommandExec

如果我使用終端ssh到服務器並執行腳本,它會正常工作(因爲命令所在的目錄將添加到路徑中)。但是,如果我嘗試通過JSch的CommandExec執行命令,我得到了一個「command not found」錯誤。

有沒有辦法在通過JSch執行腳本時將其他目錄添加到路徑中?

請注意,我無法修改服務器上的腳本。它必須按原樣運行。

myscript.sh

... 
mycommand 
... 

JSch代碼:

JSch jsch = new JSch(); 
Session session = jsch.getSession(user, host, port); 
session.connect(); 
ChannelExec channelExec = (ChannelExec)session.openChannel("exec"); 
channelExec.setCommand("/path/to/myscript.sh"); 
channelExec.connect(); 

謝謝

回答

1

我認爲最簡單的辦法是改劇本

myscript.sh

. 
. 
/full/path/to/mycommand 
. 
. 

當您直接從shell執行腳本,您的登錄導致PATH生效這是不是當你從JSch執行它的情況。


快速谷歌給了我這個[ article ]值得一讀。

+0

不幸的是,正如我在我的問題中指出的那樣,我無法修改腳本。 – Ares

+0

你可以在'JSch'中做這樣的事嗎? 1.加載myscript.sh 2.在緩衝區中修改'command'到'/ path/to/command'。 3.然後執行'channelExec.setCommand(modified_buffer);' – sjsam