Нет, $?
не сообщит вам, помешал ли параметр -n
выполнить перемещение mv
, поскольку в этом случае статус выхода будет равен 0.
Решение 1: вы можете проверить, что исходный файл не перемещался ...
mv -n file1 file2
[ -e file1 ] && echo "Hmmm, mv didn't have any effect"
Однако существует вероятность состояния гонки, если другая программа воссоздает файл1 между перемещением и ваш тест.
Решение 2: поскольку вы, кажется, используете GNU mv
, опция -v
может быть полезна, чтобы узнать, удалось ли перемещение
if mv -v -n file1 file2 | grep -q .; then
echo "The move succeeded"
fi
С -v
, если перемещение происходит, mv
выведет renamed 'file1' -> 'file2'
. Передача по конвейеру его вывода на grep -q .
проверяет, выводит ли mv
что-либо на свой стандартный вывод.
Если есть ошибка, mv
будет выводить стандартную ошибку, а grep
тоже не работает.