2013-10-13 1 views
0

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

Однако, как вы обозначаете тип аргумента?

Например, если вы хотите скомпилировать файл класса Java и затем запустить результирующий файл Java (без необходимости вводить имя файла дважды, чтобы различать расширения каждый раз), как вы позволяете функции знать, что имена принадлежат файлам разных типов?

Допустим, это наша функция:

compileAndRun() 
{ 
    javac $1 
    java $2 # basically, we want to make this take the same argument 
       # (because the names of the *.class and *.java files are the same) 
} 

Таким образом, вместо того, чтобы печатать:

compileAndRun test.class test.java 

Мы хотим просто ввести это:

compileAndRun test 

Любая помощь вместе с любыми посторонними информация, которую вы хотите бросить, будет высоко оценена.

+0

Вы можете использовать команду 'file' в некотором роде, чтобы Unix сообщила вам, что такое тип (если он известен), но то, что вы, вероятно, хотите сделать, это просто добавить' .java' в '$ 1' и' .class' до '$ 2'. Это было бы намного проще, чем синтаксический анализ вывода из 'файла'. – Faelkle

+0

Существует мало смысла указывать имя входного и выходного файлов, так как Java обеспечивает, чтобы оба имени файла совпадали с именем класса, определенного внутри (или я забыл об этом? Прошло некоторое время с тех пор, как я использовал Java). – chepner

ответ

4

Просто используйте $ 1 дважды. Безопаснее подключать две команды с &&, поэтому java не запускается, если компиляция не удалась.

function compile_n_run() { 
    javac "$1".java && java "$1".class 
} 
2

Аргументы bash Функции на самом деле не имеют типов; они просто струны, и вам решать использовать их надлежащим образом. В этом случае довольно просто написать функцию, которая берет исходный файл Java, компилирует его и запускает результирующий вывод.

compile_n_run() { 
    source=$1 
    expected_output="${source%.java}.class" 
    javac "$source" && java "$expected_output" 
} 

$ compile_n_run test.java 

Я решил потребовать полное имя источника Java, потому что он немного дружелюбен с автозаполнением; вам не нужно удалять .java из командной строки, а вы позволяете функции делать это за вас. (Иначе, этот ответ будет идентичен choroba's).

+0

Раньше я писал вам ребята, чтобы вы знали, что это работает сейчас; Думаю, мой комментарий был удален, потому что я технически «ответил» на мой собственный вопрос. Но код работает как шарм, и я получаю синтаксис Bash. Спасибо, ребята! – bonzalooie

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