Невозможно записать компакт-диск в папку на машине Linux. Говорит, что файл / папка не существует

Я записал тестовый файл ksh на компакт-диск в папку и составил листинг. Далее написано:

`cd "their_file/"`;

`pwd`;

`ls -l`;

Дает следующий результат:

./test.ksh: line 2: /home/user/final: Is a directory

./test.ksh: line 3: total: command not found

Это мой пароль:

/ home / user / final

Как мне это исправить? Я предполагаю, что он выполняет инструкцию cd, а затем выходит из нее. Я использую машину Fedora.

-2
07.04.2017, 17:28
1 ответ

Обратные галочки вокруг каждой команды в вашем скрипте заставят оболочку взять вывод команды и выполнить это как команду.

Использование обратных кавычек вокруг команды эквивалентно помещению команды внутрь $( ... ) (это предпочтительный синтаксис для захвата вывода команды).

Сообщение об ошибке /home/user/final: Is a directory исходит от ksh при попытке выполнить результат pwd в виде команды, а также , итого: команда не найдена из-за попытки выполнить результат ls -l.

Удалите обратные галочки. Также удалите точки с запятой (;). Они нужны только в том случае, если вы хотите поместить две команды в одну строку:

cd dir; pwd

Ваш скрипт должен выглядеть примерно так

#!/bin/sh

cd "their_file"
pwd
ls -l

Обратите внимание, что он по-прежнему будет выполнять pwd и ls -l. ] в случае сбоя cd. Чтобы выйти из скрипта, если cd завершается ошибкой:

#!/bin/sh

cd "their_file" || exit 1
pwd
ls -l

Здесь используется тот факт, что cd возвращает ненулевое статус выхода в случае неудачи. || (логический или) перед exit 1 означает, что скрипт продолжит выполнение оператора exit, если cd возвращает "false" (что в сценариях оболочки означает ненулевой статус выхода).


Причина, по которой вы получаете /home/user/final: Является ли каталогом и не /home/user/final/their_file: Является ли каталогом, заключается в том, что cd выполняется в вложенной оболочке (что и происходит, когда вы помещаете его в обратные кавычки или внутри $( ... )). Поскольку он выполняется во вспомогательной оболочке, фактическое изменение рабочего каталога не отражается в родительской оболочке (ваш скрипт).

По той же причине вы заметите, что когда ваш скрипт завершит выполнение, вы все еще будете в том же каталоге, в котором вы его запустили, а не в каталоге их_файл.

Подробнее об этом читайте в разделах «почему функция cd в скрипте не работает» и «Скрипт для изменения текущего каталога (cd, pwd)» (и другие подобные вопросы).

4
28.01.2020, 05:15

Теги

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