Да, &&
- это условие. Задняя команда будет запущена только в том случае, если предыдущая вернет 0
(завершится без ошибки). С другой стороны, ваш скрипт не имеет этого элемента управления, поэтому, если, например, wget завершается ошибкой, он продолжит попытку разархивировать и ничего не переместить ..
Онлайнер для вашего скрипта:
wget http://something.com ; unzip something ; mv -f something /home/poney/
Если вы можете изменить сценарий, измените его так, чтобы он говорил
a=${a:-20181214}
Это заставит использовать ранее установленное значение a
или 20181214
, если $a
пусто или переменная не установлена. Это стандартное расширение параметра .
Затем вы должны либо использовать
export a=20181212
./script.sh
или
a=20181212./script.sh
Последний из них избегает установки переменной в вызывающей среде и устанавливает ее только для среды сценария.
Если вы не можете изменить скрипт, то скрипт всегда будет переопределять ваше a
значение, что бы вы ни делали. В этом случае свяжитесь с человеком, который поддерживает сценарий, и объясните ситуацию. В худшем случае используйте копию сценария, которую вы можете модифицировать, предполагая, что сценарий не должен находиться в определенном месте.
Сценарий будет выполнен в другой оболочке. А команда export A
устанавливает переменную только для текущей оболочки. Вы можете экспортировать переменную поверх вашего скрипта, это не повлияет на остальную часть вашей среды. Например
~$ export A=a
~$ echo $A
a
если создать в той же оболочке скрипт test.sh
#!/bin/bash
export A=b
echo $A
Вывод будет 'b', но значение A в оболочке останется неизменным