Не удается найти неожиданный оператор (ошибка Bash) - PullRequest
0 голосов
/ 22 мая 2011

Я создал простой Bash-скрипт, который должен создавать символические ссылки в / usr / local / {etc, lib, include ...} из введенного пути к каталогу

#!/bin/sh

input="$1"
for subdir in "etc include bin lib man share sbin"; do
   dir=$input/$subdir
   if [ -e $dir ] && [ -d $dir ]; then
      for file in $dir/*; do
         ln -s $file /usr/local/$subdir
      done
   fi
done

Ошибка, яполучение:

user@comp:/usr/local# ./update-locallinks /usr/local/test/
[: 6: /usr/local/test/etc: unexpected operator

и вот как выглядит / usr / local / test /:

user@comp:/usr/local# ls /usr/local/test/
bin
etc
include
lib

Ответы [ 2 ]

1 голос
/ 22 мая 2011

Всегда защищайте переменные bash двойными кавычками в тестовых выражениях:

   if [ -e "$dir" ] && [ -d "$dir" ]; then
0 голосов
/ 22 мая 2011
for subdir in "etc include bin lib man share sbin"; do

Почему цитаты?Измените это на:

for subdir in etc include bin lib man share sbin; do

в противном случае $dir будет содержать etc include bin ... на первой (и единственной) итерации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...