захватить вывод сценария оболочки, который вызывается из другого сценария оболочки - PullRequest
2 голосов
/ 06 июля 2011

У меня есть скрипт с именем a.sh, содержимое которого:

//a.sh:

#!/bin/bash
temp=0
while [ "$temp" -ne 500 ]
do
    echo `date`
    temp=`echo "$temp+1" | bc`
    sleep 1
done
----------------------------------

Другой скрипт с именем b.sh, содержимое которого:

// b.sh:

#!/bin/bash

`a.sh`

exit
----------------------------------

Когда я выполняюa.sh отдельно, я могу видеть выходные данные .. но, когда я выполняю b.sh, я не могу видеть выходные данные на консоли .. (Я пытался несколько раз - перенаправить выводa.sh - но не удалось).

Итак, мне нужно перенаправление, которое позволит мне видеть вывод содержимого a.sh при выполнении b.sh - на консоли.

Спасибо, Рави.

Ответы [ 4 ]

5 голосов
/ 06 июля 2011
`a.sh`

в вашем b.sh означает взять вывод a.sh и использовать его как команду с аргументами. вам просто нужно выполнить a.sh в b.sh

$A_SH_PATH/a.sh вместо

`a.sh`
0 голосов
/ 06 июля 2011

Следующие строки в a.sh:

    echo `date`
    temp=`echo "$temp+1" | bc`

можно переписать как:

    date
    : $(( temp += 1 ))

Кажется, что основная проблема, с которой вы сталкиваетесь, заключается в неправильном понимании обратных галочек, и вы должны понимать, почему «echo` date` »(почти) в точности совпадает с просто« date »(они отличаются только пробелами). Изменение, которое я внес во вторую строку, является лишь личным предпочтением (оно также более эффективно).

0 голосов
/ 06 июля 2011

Попробуйте удалить обратные кавычки из b.sh, как показано ниже. это работает для меня.

#!/bin/bash

a.sh

exit
0 голосов
/ 06 июля 2011

Это должно "просто работать".

На вашем $ PATH есть файл .sh?

Если нет, вам нужно вызвать его путем, например, ./a.sh

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...