Итак, я пишу скрипт, который должен проверить, существует ли файл или нет до его выполнения. У меня есть следующий код:Тестовый сценарий оболочки оболочки
if [[ \(-d "DIR2" \) != true ]];
then
echo "nonexistent dir"
exit 1
elif [[ \(-d "DIR1" || -f "DIR1" \) != true ]];
then
echo "nonexistent dir or file"
exit 1
fi
Я, кажется, делают что-то неправильно со скобками, так как я получаю следующее:
./syncdir.sh: line 11: conditional binary operator expected
./syncdir.sh: line 11: syntax error near `-d'
./syncdir.sh: line 11: `if [[ \(-d "DIR2" \) != true ]];'
Я нахожу это странным, что Баш ожидает бинарного оператора Isnt «! = 'один?
Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно и почему?
Я действительно запутался в скобках, но до сих пор не получил этого.
Для условных вы начинаете [здесь] (http://tldp.org/LDP/Bash-Beginners-Guide/html/chap_07.html). Однако то, что вы делаете, - это плохая практика, потому что ваш код (даже при работе) - идеальное состояние гонки. Вам лучше просто получить доступ к папке и обработать ошибку, если папка не существует. – hek2mgl
Как это создать состояние гонки? –
@MiguelM Состояние гонки таково: ваш тест преуспевает, потому что каталог существует, затем другой процесс удаляет каталог, а затем ваш процесс пытается использовать каталог, который больше не существует. –