14

Я пытаюсь написать скрипт, который должен проверить, существует ли файл. В консоли пишу

if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

и я получаю

not mod

но когда я пишу скрипт, чтобы сделать то же самое:

#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

и затем выполнить скрипт, я получаю это:

./ex.sh: 2: [[: not found
mod

Я сохранил скрипт в текущем каталоге и назвал его ex.sh, а затем убедился, что он исполняемый. Чтобы вызвать скрипт, я делаю это:

./ex.sh

Почему я получаю эту проблему? Я уже перепробовал много вещей:

if [ -a /home ...

а также

if test -a /home ...

Они оба возвращаются

13: -a: unexpected operator

2 ответа2

9

Вы запускаете скрипт, написанный для bash, в sh, в котором отсутствуют многие расширенные возможности синтаксиса - [[ это встроенная команда bash которая недоступна в sh .

Изменить #!/bin/sh to #!/bin/bash или на #!/usr/bin/env bash .

0

Укажите bash вместо sh при запуске скрипта. Я лично заметил, что они разные под Ubuntu 12.10:

bash script.sh arg0 ... argn

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .