2014-09-18 5 views
0

Я уверен, выполнение файла оболочки, как это в терминале:передавая параметр командной строки для .Sh (оболочки) файл

./cherrypicker.sh input.txt 

input.txt содержит входной текст.

Моя цель состоит в том, чтобы передать input text непосредственно в качестве аргумента командной строки из веб-интерфейса

Я проверил cherrypicker.sh файл, чтобы получить некоторые подсказки. он имеет

tools/pos/pos.sh tools/pos $1 > $1.pos 2> /dev/null 

Если $1 был бы текст из input.txt тогда я мог бы перевалов текст непосредственно. Но когда я делаю echo $1, он дает input.txt.

Я не мог понять, что > указывает здесь, а также 2 и /dev/null

Любое объяснений будет очень заметным. Я проверил около .sh файл, но статьи говорит, что файл оболочки equavalent в .bat-файл

Cherrypicker.sh

#!/bin/bash 

echo "running stanford pos tagger..." 
tools/pos/pos.sh tools/pos $1 > $1.pos 2> /dev/null 

echo $1.pos 

echo "running stanford ner tagger..." 
tools/ner/ner.sh tools/ner $1 > $1.ner 2> /dev/null 

echo "running charniak parsing..." 
java MakeCharniakInput $1 
tools/charniak-parser/PARSE/parseIt -l300 tools/charniak-parser/DATA/EN/ $1.charniakIN > $1.charniak 

echo "running minipar parsing..." 
tools/minipar/pdemo/pdemo -p tools/minipar/data/ < $1 > $1.minipar 

echo "detecting mentions..." 
java MentionDetection $1 
tools/crf++/crf_test -m modelmd $1.crf > $1.pred 
java CreateNPSpan $1 $1.pred 


# if [[ $1 = "mp" ]] 
# then 
# echo "creating feature file...." 
#  java -cp .:edu.mit.jwi.jar CherryPick mp raw.txt 
#  echo "classifying clusters using $1 model....." 
#  tools/svmmentionpair/svm_classify raw.txt.mpsvm modelmp raw.txt.mppred 
#  java MakeCluster raw.txt raw.txt.mppred 
# elif [[ ($1 = "mr") || ($1 = "cr") ]] 
# then 
    echo "creating feature file...." 
    java -cp .:edu.mit.jwi.jar CherryPick cr $1 
    echo "classifying clusters using cr joint model....." 
    tools/svmrank/svm_classify $1 modelrank > $1.entities 
# else 
#  echo "cannot classify clusters using *mysterious* model....." 
# fi 


echo "creating output....." 
java MakeResponse $1 
+1

'cherrypicker.sh' ожидает ввода имени файла, а не текста. Поскольку различные программы, используемые в этом скрипте, также ожидают имя файла и не могут быть предоставлены какой-либо текст напрямую (в частности, «java»), вам сначала нужно создать файл, содержащий ваш текст, а затем передать его скрипту. –

ответ

1

Команда:

tools/pos/pos.sh tools/pos $1 > $1.pos 2> /dev/null 

Объяснение:

tools/pos/pos.sh - script 

tools/pos   - Positional argument 1 for pos.sh 

$1    - Positional argument 2 for pos.sh 

$1.pos   - Is a file which will hold the standard output of pos.sh 

/dev/null   - is a null file which will hold standard error 

Сервис/поз/поз.ш принимает два postional аргументов в этом случае tools/pos & $1(input.txt) делает свою работу

и перенаправляет стандартный вывод tools/pos/pos.sh в файл $1.pos(input.txt.pos), часть > $1.pos команды делает это и

часть 2> /dev/null из вышеупомянутых команд переадресовывают стандартная ошибка до /dev/null

+0

спасибо, дорогой, не могли бы вы рассказать мне в './cherrypicker.sh input.txt', как я могу напрямую передать текстовый файл ввода текста. Я редактировал вопрос с содержимым файла оболочки – user123

+2

Короткий ответ: вы не можете, вам нужно создать файл, содержащий ваш текст, и передать имя этого файла. –

+1

Как @Lars Noschinski предположил, что вы не можете передать содержимое файла, и вам не нужно, ./cherrypicker.sh ожидает имя файла в качестве аргументов, и cherrypicker использует это имя файла inturn для передачи имени файла как аргумент другим командам и скриптам, используемым в cherrypicker.sh, передача содержимого имени файла в cherrypicker.sh приведет к поломке скрипта – Ram

1

1)> и 2> манипулировать стандартный вывод и перенаправление потока ошибок соответственно, так что ваш вывод перехожу в $ 1.pos и ошибки перенаправляются в/DEV/нуль (отбрасывается)

2) если вы хотите кормить содержимое файла в качестве входных данных, то можно перенаправить файл в качестве входных данных, например:

tools/pos/pos.sh tools/pos < $1 > $1.pos 2> /dev/null 

или через трубу:

cat $1 | tools/pos/pos.sh tools/pos > $1.pos 2> /dev/null 

3) если вы хотите, содержимое файла в качестве аргумента (я надеюсь, что input.txt только одна линия), то попробуйте следующее:

tools/pos/pos.sh tools/pos `cat $1` > $1.pos 2> /dev/null 

или можно попробовать xargs выполнить вашу команду один раз в каждой строке:

cat $1 | xargs -I myargs tools/pos/pos.sh tools/pos myargs >> $1.pos 2> /dev/null 

здесь >> означает стандартный вывод добавляется в тот же файл.

+0

спасибо, дорогой, не могли бы вы рассказать мне в './cherrypicker.sh input.txt', как я могу напрямую передать текстовое имя текстового файла. Я редактировал вопрос с содержимым файла оболочки – user123

+1

использовать xargs для вызова вашей команды для каждой строки: cat input.txt | xargs ./cherrypicker.sh – mariusm

+1

Кстати, вы можете найти всю эту информацию в руководстве, например: «man xargs» это крутое обучение, но оно того стоит (интерфейс Unix не изменился в течение многих лет). – mariusm

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