2016-12-09 1 views
0

Очень простой скрипт для копирования файлаКопирование .jpg файл, используя скрипт дает «Не удалось открыть входной поток для файла» ошибки

#!/bin/bash 

#copy file 
mtp-getfile "6" test2.jpg 

Я установить его в качестве исполняемого файла и запустить его с помощью

sudo sh ./test.sh 

Это дает мне файл с именем test2.jpg, у которого нет значка, и я не могу открыть. Я получаю сообщение «Не удалось открыть входной поток для файла».

Однако, если я просто выдаю из командной строки

mtp-getfile "6" test2.jpg 

Работает должным образом. Что не так с моим скриптом? Я проверил, и полученный файл .jpg в каждом случае имеет такое же количество байтов. Очень странно.

+2

У вашего сценария могут быть окончания строки DOS, и в этом случае вы действительно создали файл с именем 'test2.jpg \ r' (т. Е. Он содержит возвращаемый возврат каретки) , – chepner

ответ

0

Видимо, это была проблема с разрешениями. Мне только нужно было сделать sudu chown test2.jpg

0

Как прокомментировал chepner, ваш файл может иметь невидимую строку DOS (Windows), заканчивающуюся на ее имя, что приведет к ошибке. Чтобы избавиться от этого нежелательного персонажа, просто создайте новый пустой скрипт в вашей системе «nix» и введите имя вручную (не путем копирования и вставки, чтобы избежать проблем), допустим, назовите его test2.sh.

Затем скопируйте все содержимое test.sh в test2.sh (скопируйте и вставьте) и запустите test2.sh и посмотрите, работает ли оно. Если этого не произойдет, попробуйте запустить следующий код на новый сценарий, чтобы убедиться, что нет никаких нежелательных символов на сам код:

tr -d "\r" < /folder/test2.sh && echo >> /folder/test2.sh 

А потом попробуйте запустить script2.sh снова, чтобы увидеть, если он работает. Примечание. Часть кода, приведенная выше, предназначена только для того, чтобы ваш новый скрипт заканчивался новой строкой, которая является стандартом Posix (и без которой некоторые программы могут ошибочно работать, потому что ожидают, что файл закончится с новой строкой).

Смежные вопросы