2015-12-04 4 views
0

Я написал небольшой сценарий, который должен переименовать некоторые файлы в каталог для меня.Почему вывод из моего скрипта говорит «mv: command not found», но не тогда, когда я запускаю его непосредственно в оболочке?

#!/bin/bash 

a=1 
for i in *.jpg ; do 
     new=$(printf "%04d.jpg" "$a") 
     mv "$i" "$new" 
     let a=a+1 
done 

#end of file 

После запуска скрипта говорит следующее: «мв: команда не найдена»

Почему нет выхода ошибок при запуске кода непосредственно на корпусе, как это:

for i in *.jpg ; do new=$(printf "%04d.jpg" "$a") ; mv $i $new ; let a=a+1 ; done 
+3

Убедитесь, что вы не создаете/установка переменную '$ PATH' где-нибудь в скрипте – arco444

+2

BTW , поэтому стандарт POSIX предполагает, что приложения используют имена нижнего регистра для своих собственных переменных среды (и, следовательно, переменные оболочки, поскольку они имеют пространство имен); он предотвращает ошибочно переопределяющие переменные в пространстве имен, зарезервированном для использования в системе. См. Четвертый абзац http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html –

+1

Также убедитесь, что у вас нет контрольных символов в этом скрипте: 'od -c myscript.sh' –

ответ

4

Возможно, это вопрос PATH настройка. Каталог /bin должен быть внутри $PATH

Для целей отладки, добавьте

echo PATH is $PATH 

при запуске вашего сценария, и, возможно, поместить #!/bin/bash -vx в первой строке вашего скрипта. См. this, execve(2), bash(1).

Как Обойти

  mv "$i" "$new" 

с

  /bin/mv "$i" "$new" 

См mv(1)