почему bash изменил мою команду «mysql *» на «mysql.sql»? - PullRequest
0 голосов
/ 07 мая 2019

Я уверен, что в каталоге нет такого файла с именем mysql.sql

Операционная система infor

cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 

У меня есть сценарий оболочки. Одна строка возвращает ненулевой код

yum install -y mysql*  1>/dev/null 2>/dev/null

Когда я запускаю эту строку в терминале, все в порядке, и код возврата (echo $?) Равен нулю.

Но в скрипте он вернет 1, а с параметром -x я вижу, как bash меняет строку на

yum install -y mysql.sql

Так почему же mysql * заменен на mysql.sql?

1 Ответ

2 голосов
/ 07 мая 2019

В текущей директории скрипта есть файл mysql.sql.

Процитируйте аргумент, чтобы bash не расширил его, чтобы yum смог.

yum install -y "mysql*"  1>/dev/null 2>/dev/null

В общем, вы всегда хотите заключать аргументы в кавычки с *, если не хотите, чтобы они были расширены как глобальные. Bash по умолчанию пропускает их буквально, если они ничего не соответствуют, но вы обычно не можете этого гарантировать, поэтому лучше просто процитировать это.

...