2009-10-15 3 views
0

я есть UNIX скрипт, который должен быть запущен как нижеПроблема в запуске сценария

test_sh XYZ=KLMN 

содержание скрипта

#!/bin/ksh 

echo $XYZ 

для использования значения XYZ я имею сделать set -k перед тем, как запустить сценарий.

есть способ, которым я могу сделать это без набора doint -k перед запуском скрипта. или есть что-то, что я могу сделать в сценарии, где я могу использовать значение параметра заданного во время выполнения скрипта в поле ниже пути

test_sh XYZ=KLMN 

я использую Ksh. Любая помощь приветствуется.

+0

Вы получили хорошие ответы на свои домашние задания здесь: http://stackoverflow.com/questions/1570383/problem-in-a-shell-command –

ответ

0

Похоже, вы пытаетесь использовать переменную окружения «INSTANCE» в своем скрипте.

Для этого переменная окружения должна быть установлена ​​до выполнения сценария. Использование команды «set» устанавливает экспортируемые переменные среды. Кстати, моя версия ksh датируется 1993 годом, а опция «-k» была тогда устаревшей.

Чтобы установить переменные окружения так, что она экспортируется в выметанные оболочки, просто используйте команду «Экспорт», как так:

export INSTANCE='whatever you want to put here' 

Если вы хотите использовать позиционный параметр для сценария - это имеют значение «KLMN» доступны в вашем скрипте, и предполагая, что это первый параметр, то необходимо выполнить следующие действия в сценарии:

#!/bin/ksh 

echo $1 

вы также можете присвоить позиционный параметр локальной переменной для последующего использования в ваш сценарий выглядит так:

#!/bin/ksh 

param_one=$1 
echo $param_one 

Вы можете назвать это с:

test_sh KLMN 

Обратите внимание, что расстояние в задании важно - не использовать пробелы.

4

Как насчет запуска этого?

XYZ=KLMN ./test_sh //running from directory where test_sh is 
+1

синоним использования внешнего/usr/bin/env, который является нейтральным : env XYZ = KLMN ./test.sh –

+0

contraint - мне нужно запустить скрипт таким образом только test_sh XYZ = KLMN – Vijay

3

Если сценарий не нуждается ни в каких других аргументов, быстрый и грязный способ сделать к нему поставить

eval "[email protected]" 

в начале вашего скрипта. Это будет оценивать аргументы командной строки как команды оболочки. Если эти команды должны назначить переменную оболочки/среды, то это то, что она будет делать.

Это быстро и грязно, поскольку в командной строке может быть помещено что-либо из-за ошибки синтаксиса в плохое отверстие безопасности (если скрипту доверяют).

Я не уверен, что «$ @» означает то же самое в ksh, что и в bash - использование только $ * (без кавычек) тоже будет работать, но даже более грязно.

+0

+1 Я думаю, что в этом случае простой eval $ 1 будет делать –

0

Я Тринг этот вариант

#!/bin/ksh 

echo $1 
awk '{FS="=";print $2}' $1 

и в командной строке

test_sh INSTANCE=LSN_MUM 

но AWK является failing.is есть какие-либо проблемы здесь?

+1

Это обрабатывает '$ 1' как файл имя. Вместо этого вы должны повторить это через трубку. –

0

Возможно #!/bin/ksh -k будет работать (непроверено).

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