#linux #bash #shell #scripting
#linux #bash #оболочка #сценарии
Вопрос:
Я пытаюсь создать свой первый сценарий оболочки в bash. Я создал код, и мне удалось сохранить скрипт в моем домашнем каталоге, но он не запускается. Сначала я пытаюсь запустить его из домашнего каталога с помощью: ./testscript.sh
с «отказано в разрешении» в качестве ответа, затем я попробовал sudo ./testscript.sh
, а затем «команда не найдена«.
Это мой скрипт:
#!/bin/bash
mkdir -p/home/filer
touch /home/filer/fil1
touch /home/filer/fil2
touch /home/filer/fil3
tar-zcvf file.tar.gz /home/filer
Итак, я попытался создать скрипт, который создаст каталог с именем «filer» в моем домашнем каталоге, используя touch для создания 3 отдельных файлов в каталоге «filer», а затем создаст tar.archive из всего каталога «filer». Я думаю, что сценарий правильный, я мог бы просто использовать руку, запускающую скрипт.
Комментарии:
1. Вы не забыли дать ему разрешения на выполнение?
2. @ChristianGibbons Я не уверен, я думал, что » #! » сделал это исполняемым?
3.
#!<interpreter_path>
просто помогает оболочке найти интерпретатор, который должен выполнить скрипт. Сначала скрипт должен иметь права доступа к исполняемому файлу.4. Нет, это просто говорит ему, с чем его запускать, когда вы пытаетесь выполнить. Требуется разрешение на выполнение в файловой системе, которое вы можете добавить с помощью
chmod
команды.5. В противном случае вы всегда можете попробовать вызвать интерпретатор напрямую:
bash testscript.sh
Ответ №1:
За исключением пары опечаток ( mkdir -p/path
-> mkdir -p /path
, tar-zcvf
… -> tar -zcvf
…), вы должны ссылаться на свой домашний каталог, используя $HOME
переменную среды. /home/filer
это абсолютный путь к каталогу, который, как я предполагаю, не является вашим фактическим домашним каталогом.
#!/bin/bash
mkdir -p $HOME/filer
touch $HOME/filer/fil1
touch $HOME/filer/fil2
touch $HOME/filer/fil3
tar -zcvf file.tar.gz $HOME/filer
Вы можете выполнить скрипт, ./testscript.sh
как bash testscript.sh
или ./testscript.sh
.
Во втором случае скрипт должен иметь соответствующие права доступа к исполняемому файлу. chmod x ./testscript.sh
предоставляет ему полные права на исполняемый файл.
Комментарии:
1. Я изменил это, я все еще получаю » Команда не найдена «, когда пытаюсь запустить ее с помощью. /testscript.sh
2. интервал между -p и -zcvf — это просто опечатка в стеке, она верна в моем сценарии. Спасибо, что предупредили. Как я понял, для запуска этого скрипта все, что нужно, это ввести: » ./ «, поскольку я нахожусь в том же каталоге, что и testscript.sh файл. Однако, как только я пытаюсь запустить его, команда не найдена — это единственный ответ, который я получаю.
3. Запустите
bash -xe ./testscript.sh
и сообщите нам точный результат