В моем сценарии восстановления mysql я использую файл mysqldump, ранее созданный для ввода. Это имя файла указывается в командной строке в качестве аргумента и может быть или не быть заархивировано. Я хочу использовать файл в качестве входных данных для оператора mysql, но не изменять / заархивировать файл, просто прочитайте его содержимое.
Я использую следующий код для ввода в команду mysql (которая мне нравится):
mysql -u $user -p"$pass" $dbname <( [[ "${mysqldumpfile: -3}" = ".gz" ]] && gzip -d -c "${mysqldumpfile}" || cat "${mysqldumpfile}" )
Таким образом, имя файла дампа mysql оканчивается на «.gz», после чего я зацикливаюсь на stdout, иначе я перехожу на stdout. stdout от любого из них используется в качестве стандартного ввода для команды mysql.
Это UUOC? Есть ли способ НЕ использовать кошку?
Есть ли другой способ сделать это (на одной строке)? И чтобы быть ясным, я не хочу проверять оператор if/then/else/ и делать две разные команды mysql. Мне нравится одна командная строка, которая может использовать два разных ввода.
РЕДАКТИРОВАТЬ: Поскольку zcat -f
будет распаковывать и cat или просто cat, если данные не сжаты, это не лучший пример. Я все еще хотел бы знать, есть ли другой способ <( test && do_this_command_as_input || cat this_is_the_input )
и не использовать cat.
И прежде чем кто-то упомянет об этом ... вы не можете вводить в командную строку mysql с помощью <( )
.