#bash #shell #terminal
#bash #оболочка #терминал
Вопрос:
У меня есть файл под названием installer.txt который будет содержать построчные URL-адреса .tar.gz файлы, подобные:
http://oscargodson.com/projects/example1.tar.gz
http://oscargodson.com/projects/anotherexample.tar.gz
http://oscargodson.com/projects/onemore.tar.gz
И я попытался:
#!/bin/bash
file = `cat installs.txt`
for word in file; do
echo $word
done
Но мой вывод выглядит так:
Oscars-MacBook-Air:Desktop oscargodson$ ./test.sh
=: cannot open `=' (No such file or directory)
http://oscargodson.com/projects/example1.tar.gz: cannot open `http://oscargodson.com/projects/example1.tar.gz' (No such file or directory)
http://oscargodson.com/projects/anotherexample.tar.gz: cannot open `http://oscargodson.com/projects/anotherexample.tar.gz' (No such file or directory)
http://oscargodson.com/projects/onemore.tar.gz: cannot open `http://oscargodson.com/projects/onemore.tar.gz' (No such file or directory)
file
Он должен выводить каждую строку, или, так я думал. Идеи?
Ответ №1:
Ваши ошибки на самом деле генерируются оператором присваивания. У вас не может быть пробелов вокруг вашего назначения. И рекомендуется всегда заключать rhs в кавычки. Итак, что вы хотите, это
#!/bin/bash -u
file="$(cat installs.txt)"
for word in $file; do
echo $word
done
Я также изменил ваши обратные запросы на $( )
, поскольку это рекомендуемый способ, и я думаю, что его тоже легче читать
Комментарии:
1. Спасибо. Исходя в основном из фона JavaScript и некоторых rails, этот синтаксис довольно странный для меня 🙂
2. Он также пропускал
$
при использованииfile
— Я вижу, вы это тоже исправили.3. Кроме того, что означает -u в shebang? Погуглил, но безрезультатно.
4.
-u
Означает, что скрипт выдаст ошибку, если вы ссылаетесь на неустановленную переменную. Очень полезно для обнаружения опечаток. например, если у вас случайно получилосьecho $wrod
, было бы просто напечатать пустые строки. Но с-u
это напечатало бы сообщение об ошибке, в котором говорится, чтоwrod
это неопределенная переменная