2013-10-26 2 views
1

Я написал сценарий bash, который вызывает другой скрипт, передавая ему аргумент. Аргументом в этом случае является файл, содержащий несколько строк.bash script invoke другая программа с аргументами

я сделать что-то вроде этого:

#! /bin/bash 

`python script.py -i input.txt /path/to/somefile` 

теперь input.txt содержит такие строки:

something 1 
something 2 
something 3 

Проблема здесь в том, что каждая строка input.txt оценивается как сама программа скриптом bash вместо того, чтобы быть переданным, как и для программы script.py.

так что программа script.py ожидает файл с 3 строками в качестве входных данных, как показано выше, но вместо этого получает другой вход (результат оценки чего-то 1, что-то 2 и т. Д.).

Как передать этот файл в качестве аргумента для script.py?

, если я призываю script.py вне сценария Баш как это:

python script.py -i input.txt /path/to/somefile 

это работает хорошо. script.py читает одну строку из input.txt за раз и работает на нем.

+0

Любопытно, почему вы считали, что обратные сигналы нужны в bash? Фон Perl? – hyde

ответ

2

Удалить кавычку вокруг команды питон ... Я думаю, что вы искажая, что происходит, питон выход оценивается как команда, а не input.txt.

Backticks выполняет команду замены, то же, что и $( ... ). Обсуждались, например, here и here. Обычно он используется как аргумент для команды, например ls -l $(cat filelist.txt), но он также работает как целая команда. Хотя, если вы слепо выполняете какой-либо вывод какой-либо программы, вы должны быть уверены, что вы доверяете правильному выводу, заслуживающему доверия и свободному от каких-либо дыр в безопасности, которые позволили бы запускать команду оболочки (читай: не делайте этого; -) ...

+0

Спасибо. Я это понял :) –

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