Сценарий оболочки не фиксирует значение, но командная строка может фиксировать и обновлять данные в переменной. - PullRequest
0 голосов
/ 13 июля 2020

Проблема Почему read_stat не обновляется внутри скрипта, но отлично работает из командной строки?

Фактическая реализация и вывод

Shell Script: Test1. sh

sg_raw -v -s 512 -i ttttt.bin / dev / sg4 12 00 00 00 &> read_stat

if grep - w "Хорошо" read_stat; затем

 printf "PASS"

else

printf «FAIL»

Вывод при выполнении сценария

$ sudo./Test1. sh

$ sg_raw -v -s 512 -i ttt.bin / dev / sg4 12 00 00 00

cdb to send: 12 00 00 00

Статус SCSI: Хороший

FAIL

(base) dd@qqqq: ls -l

-rwxrwxrwx 1 dd dd 0 13 июля 11:09 read_stat

ВЫПОЛНИТЬ КОМАНДУ С ТЕРМИНАЛА

$ sg_raw -v -s 512 -i ttttt.bin / dev / sg4 12 00 00 00 &> read_stat

$ ls -l

-rwxrwxrwx 1 dd dd 41 13 июля, 11:15 read_stat

$ cat read_stat

Статус SCSI: Хорошо

Нет ошибок

Предыдущая реализация (игнорировать)

Сценарий оболочки: Test1. sh

  1. Создан файл как read_stat

-rwxrwxrwx 1 dd dd 0 13 июля, 10:14 read_stat

Выполнил следующую команду из Test1. sh

sg_raw -v -s 512 -i ttttt.bin / dev / sg4 12 00 00 00 &> read_stat

ls -l из командной строки

-rwxrwxrwx 1 dd dd 0 13 июля 10:18 read_stat

Но если та же команда «sg_raw - v -s 512 -i ttttt.bin / dev / sg4 12 00 00 00 &> read_stat "

выполняется из командной строки, тогда я могу увидеть значение внутри read_stat

-rwxrwxrwx 1 dd dd 14 июля 13 10:18 read_stat

Почему read_stat не обновляется внутри скрипта, но отлично работает из командной строки?

1 Ответ

0 голосов
/ 14 июля 2020

Используется 2> read_stat вместо &> read_stat. Возможность захвата данных в переменной!

Старый формат: sg_raw -v -s 512 -i ttttt.bin / dev / sg4 12 00 00 00 &> read_stat

Новый формат: sg_raw -v -s 512 -i ttttt.bin / dev / sg4 12 00 00 00 2> read_stat

...