2010-06-25 2 views
1

Я пытаюсь прочитать имя папки из командной строки для приложения Java в Unix.Чтение аргументов командной строки Java в Unix

У меня есть скрипт (КШ test.ksh) и имеет следующую строку:

java SomApp $* 

Я пытаюсь выполнить это, как показано ниже:

test.ksh ../folder 

Но это не удается; Я имею в виду, что мое приложение Java говорит, что в разделе «../folder» ничего нет, хотя есть некоторые файлы.

Как читать такие относительные пути в Unix?

+3

Можете ли вы разместить фактическую ошибку? Кроме того, публикация строки кода, которую вы используете для чтения имени папки, также будет хорошей идеей. – TofuBeer

ответ

1

Не совсем понятно, что вы пытаетесь сделать.

--snip--

Если вы хотите, имя каждого файла под папку в качестве аргумента в вашей команде, попробуйте что-то вроде

java SomeApp `ls ../folder` 

... который будет выполнять команду LS против ../folder и замените вывод (список файлов в папке ../folder).

+1

Какая оболочка требует одинарных кавычек? Разве это не глотание с ../folder/* более обычным? – erickson

+0

Предлагаемые одинарные кавычки как я, так как я неправильно понял один из комментариев читателей - по перечитанию согласен, удален из ответа. Что касается обычного, я не знаю - мой ответ был первым, что появилось мне в голову, но ../folder/* должно работать, но включает в себя относительную информацию о пути на выходе, которая может быть тем, чего хочет ассер, не может сказать , – Brabster

0

Вот простая программа для перечисления файлов в каталоге, указанном в командной строке.

public static void main(String... argv) { 
    File[] list = new File(argv[0]).listFiles(); 
    for (File f : list) { 
    System.out.println(f.getAbsolutePath()); 
    } 
} 
0

Ключевой вопрос: «Ожидает ли приложение Java имя каталога или список имен файлов?»

Если приложение ожидает имя каталога, вы указали ему имя каталога. Если ваш сценарий оболочки не делает что-то неожиданное, например рабочий каталог изменения (cd), проблема, скорее всего, будет в приложении.

Если приложение ожидает список имен файлов, вы должны передать им имена файлов, а не имя каталога. Это может быть просто:

./test.ksh ../folder/* 

Или вы, возможно, должны быть более избирательным, если папка содержит вложенные папки, и приложение будет расстраиваться по именам папок вместо имен файлов.

Смежные вопросы