I'm trying to write a script that has to check if a file exists. In the console I write
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi
and I get
not mod
but when I write a script to do the same thing:
#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi
and then execute the script, I get this:
./ex.sh: 2: [[: not found
mod
I saved the script on the current directory and named it ex.sh, then I made sure it is executable. To call the script I do this:
./ex.sh
Why am I getting this problem? I already tried many things:
if [ -a /home ...
and
if test -a /home ...
Both of them return
13: -a: unexpected operator
Best Answer
You are running a script written for bash under sh, which lacks many of the extended syntax features –
[[
is abash
builtin command and is not available insh
.Change
#!/bin/sh
to#!/bin/bash
or to#!/usr/bin/env bash
.