Сценарии оболочки: вложенная оболочка ++ - PullRequest
0 голосов
/ 13 мая 2010

Больше, чем проблема, это запрос "другого способа сделать это".

На самом деле, если я хочу использовать результат предыдущей команды в другой, я использую:

R1=$("cat somefile |  awk '{ print $1 }'" )
myScript -c $R1 -h123

тогда «лучший путь»:

myScript -c $("cat somefile |  awk '{ print $1 }'" ) -h123

Но что, если мне придется использовать результат несколько раз? Допустим, используя несколько раз $R1, хорошо, 2 варианта:

Вариант 1

R1 = $ ("cat somefile | awk '{print $ 1}'")

myScript -c $R1 -h123 -x$R1

вариант 2

myScript -c $("cat somefile |  awk '{ print $1 }'" ) -h123 -x $("cat somefile |  awk '{ print $1 }'" )

Знаете ли вы другой способ «сохранить» результат предыдущей команды / сценария и использовать его в качестве аргумента в другой команде / сценарии?

Ответы [ 2 ]

0 голосов
/ 01 июня 2010

Еще один не идеальный способ:

исходный сценарий № 1, тогда при запуске сценария № 2 все переменные, объявленные в № 1, становятся доступными для № 2.

#!/bin/ksh
.  myScript -c $("cat somefile |  awk '{ print $1 }'" ) -h123 
myScript2 

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

В bash встроенная команда source совпадает с командой 'dot'

0 голосов
/ 15 мая 2010

Конечно, есть и другие способы. Они просто не лучшие способы.

Сначала вы можете сохранить ответ в файле, а затем несколько раз просмотреть содержимое файла.

Во-вторых, вы можете передать результаты в функцию bash, например:

callMyScript() {
   myScript -c "$1" -h123 -x "$1" 
}

вызывается таким образом:

callMyScript "$(awk '{ print $1; }' somefile)"

, который почти точно идентичен простому сохранению в локальной переменной.

Значит, вы заинтересованы в использовании awk? Вы можете сделать так, чтобы awk сгенерировал для вас строку, а bash запустил ее:

eval $(awk '{ printf "myScript -c %s -h123 -x %s\n", $1, $1; }' somefile)

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

Мой совет: Используйте переменную.

...