2017-08-02 44 views
0

我正在使用Oracle的ftm cli。當我運行一個命令時,它會通過說「輸入密碼」來要求輸入密碼。我正在編寫一個使用此命令的腳本,因此我想以編程方式輸入密碼。 以下是我試過的 -將輸入重定向到bash腳本中的Java應用程序

echo "password" | java -jar ftmcli.jar list 

但是這不起作用。任何想法做什麼來使它工作?

+0

ftm cli的呼叫在哪裏? –

+0

也許您需要在備選方案中使用'expect' – CWLiu

+0

@MarkSetchell我已通過java命令將呼叫替換爲ftm cli。實際的調用看起來像'java -jar ftmcli.jar list' – user7916799

回答

2

如果不能查看ftmcli的源代碼,我認爲Oracle正在使用java.io.Console類中的Console.readPassword()。然而,與此功能的障礙:

公共final類控制檯

方法來訪問基於字符的控制檯設備,如果有的話,與當前Java虛擬機關聯 。

虛擬機是否具有控制檯取決於底層平臺以及虛擬機的調用方式。如果虛擬機從 交互式命令行啓動而不重定向標準輸入和 輸出流,則其控制檯將存在,並且通常將連接到啓動虛擬機 的鍵盤和顯示器的 。如果虛擬機自動啓動,對於後臺作業調度程序的示例 ,則它通常不具有控制檯 。

如果此虛擬機具有控制檯則由此類的,其可通過調用 System.console()方法獲得 唯一的實例表示。如果沒有控制檯設備可用,則該方法的調用將返回空值。

通過管道/重定向的echostdout到JVM,Java方法System.console()將返回null,因此無法讀取您重定向任何東西。

看看哪款處理同樣的問題,下面的問題,但在Java方面:"How to handle java passwd reading when System.console() returns null?"How to pipe input to Java program with bash

在你的身邊,還有或多或少什麼你能真正做到。執行echo $password | java -jar ftmcli.jar listjava -jar ftmcli.jar list <<< $password將始終失敗,只要Oracle不改變ftmcli如何從stdin讀取密碼的方式。

+0

您可以嘗試的一件事是將密碼發送到'/ proc/$(pgrep -f'-jar ftmcli.jar list)/ fd/0「(特定進程的」stdin「),然後啓動」ftmcli「,然後等待輸入。但是,我沒有嘗試這一點,並不能保證它會起作用。 –

+1

很好的答案。有時可以通過設置環境變量來傳遞密碼(例如'export FTM_PASSWORD = secret')。不知道這是否可能。 –

相關問題