[英]How to read the contents of a file using bash, then split the lines in that file, and call a java program with them as arguments?
[英]How to get arguments from console in java when using a bash file?
我有一個使用bash文件啟動的Java項目:
#!/usr/bin/env bash
java -classpath logger/bin:banking/bin:testframework/bin test.RunTest
我在終端(在ubuntu中)啟動bash:
firefrost@firefrost-PC:~/ProjetPOO3A$ bash test.sh banking.Account
在我的主體中,我嘗試獲取參數為:
public class RunTest {
public static void main(String[] args) {
System.out.println(args.length);
for(int i = 0; i < args.length; i++)
{
...
問題是args.length應該為1時為0,因為我在控制台中傳遞了參數“ banking.Account”。
如果我把參數放在bash文件中:
#!/usr/bin/env bash
java -classpath logger/bin:banking/bin:testframework/bin test.RunTest banking.Account
我的主要人知道參數,並且System.out.println輸出1。
為什么不考慮控制台中的參數?
Java代碼沒有問題。 您的參數不會在shell腳本中傳播到java
命令。
#!/usr/bin/env bash
java -classpath logger/bin:banking/bin:testframework/bin test.RunTest "$@"
$@
變量包含傳遞給shell腳本的所有參數。
bash腳本的命令行參數可以用$1
, $2
等訪問 。 這是更完整的解釋 。
嘗試如下更新腳本:
#!/usr/bin/env bash
java -classpath logger/bin:banking/bin:testframework/bin test.RunTest $1
您忘記處理bash文件中的參數。
您可以使用$ 1,$ 2,$ 3,$ ...變量來訪問它們。
例如,編寫./my.sh test test2
$ 1將包含test和$ 2 test2
因此,將您的腳本更改為
#!/usr/bin/env bash
java -classpath logger/bin:banking/bin:testframework/bin test.RunTest $1
添加"$@"
以將參數傳遞給程序:
#!/bin/bash
java -classpath logger/bin:banking/bin:testframework/bin test.RunTest "$@"
不要忘記$@
周圍的引號,因此bash將“保護”每個參數:
@
從一個開始擴展到位置參數。 當在雙引號內進行擴展時,每個參數都會擴展為單獨的單詞。 也就是說,“ $ @”等效於“ $ 1”“ $ 2” ...如果在單詞中出現雙引號擴展名,則第一個參數的擴展名將與原始單詞的開頭部分連接在一起,並且擴展名最后一個參數中的表示與原始單詞的最后一部分結合在一起。 當沒有位置參數時,“ $ @”和$ @擴展為空(即,它們被刪除)。
見bash man 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.