один простой маленький «компакт-диск» не работает в скрипте [дубликат]

У вас есть разные настройки пути при запуске cron, поэтому всегда используйте абсолютные пути в сценариях или службах cron.

1
28.12.2016, 19:40
3 ответа

Ваш второй вопрос прост:

.: .: is a directory

Когда вы выполняете сценарий Bash и Bash сталкивается с ошибкой, он печатает имя сценария и строку, в которой была обнаружена ошибка, примерно так:

script.sh: line X: some message

Командная строка bash . something.sh пытается запустить . как сценарий, и, таким образом, потерпеть неудачу. Возможно, вы искали bash ./script.sh? В этом случае вам не нужно указывать полный путь. Bash сможет найти скрипт, если вы сделаете только bash script.sh.

Вывод вашего скрипта несколько странный:

: No such file or directorye/<my username>/<long path>

В нем отсутствует информация о файле и часть сообщения об ошибке.

Я предполагаю, что в вашем скрипте есть некоторые непреднамеренные непечатаемые символы. Если он был написан в редакторе, который использует терминаторы строк CR-LF, вы можете импортировать его с помощью fromdos -b script.sh. Флаг -b гарантирует, что fromdos оставит резервную копию вашего оригинального файла. Если вы работаете на Debian, вы можете установить эту программу с пакетом tofrodos.

Чтобы проверить, нет ли у вас непреднамеренных непечатаемых символов, используйте cat -A. Может появиться несколько интересных вещей. Например, символы TAB будут печататься как ^I, а новые строки - как $. Если в вашем файле есть перевод строки в стиле MS-DOS, он будет выглядеть как ^M$.

1
27.01.2020, 23:19

Вам следует

  • проверить сценарий на наличие «скрытых символов» перед вашей частью «/ home» (это объясняет, что он не может перейти к нему, и почему дисплей также обрезает его часть). Например: cat -ve THEFILE # -e пометит каждый конец строки $ и -v отобразит некоторые управляющие символы в форме ^ x , например: ^ M для управляющего символа «Возврат каретки».

  • Исправить: для этого введите рабочий пример в свою оболочку, затем скопируйте его с помощью мыши и отредактируйте сценарий, удалите строку и вставьте скопированную на ее место. (в vi: если сценарий в точности соответствует описанию (а ошибочная строка - это строка 4): вы переходите к строке 4 с помощью 4G , затем удаляете эту строку с помощью dd и переходите в режиме вставки в строке выше с помощью: O (заглавная o). Затем вы можете вставить строки, которые вы скопировали с помощью мыши. затем Escape , чтобы вернуться в командный режим, и : wq , чтобы записать изменения в файл и выйти из vi.

  • Вы можете сравнить вывод $ (pwd) со значением $ PWD: попробуйте заменить: echo $ PWD с: pwd; echo "PWD = $ PWD"

  • наконец: bash. Script.sh должен быть: bash ./script.sh . вы набрали команду ask bash выполнить "." с аргументом "script.sh", а "." - каталогом, bash жалуется. Когда вызывается таким образом, жалоба обычно находится в форме: имя_программы: какое-то сообщение Здесь bash пытается выполнить программу . , поэтому в его сообщении об ошибке ошибочно используется .: в качестве приглашения имени программы, и отображается сообщение .: это каталог , указывающий, что он не может выполнить его и почему (это каталог, а не сценарий bash).

  • Обратите внимание, что когда вы вызываете script.sh таким образом (bash ./script.sh), вы просите текущую оболочку вызвать подоболочку bash , которая выполнит script.sh ] и выйдите. Только эта подоболочка bash будет: повторять PWD, затем переходить в каталог, повторять новый PWD. Когда этот bash завершает работу, ваша текущая оболочка все еще находится в исходном каталоге. Если вы хотите, чтобы файл вносил изменения в вашу текущую оболочку, вместо этого укажите его: . ./script.sh или в bash вы также можете source ./script.sh (примечание: . - более переносимый способ получить файл) (примечание 2: в последней версии оболочки рекомендуется указать путь к исходному файлу, например: .script.sh тоже может работать, но рекомендуется указать локальный путь, например: . ./script. sh )

3
27.01.2020, 23:19

Можете ли вы выполнить следующую команду и запустить ее снова?

dos2unix script.sh

Если все еще не работает, удалите непечатаемые буквы из файла используя команду ниже

tr -cd "[: print:]" script.sh> script2.sh bash script2.sh

0
27.01.2020, 23:19

Теги

Похожие вопросы