mv: отсутствует файловый операнд при использовании mv в сценарии оболочки, но не в терминале - PullRequest
0 голосов
/ 12 июля 2019

Я пытаюсь написать сценарий оболочки, в котором пользователь вводит, какой файл он хочет переименовать в качестве первой переменной, а затем, что он хочет, чтобы новое имя было для его второй переменной. Единственный вывод, который выдаст программа, это то, что в mv отсутствует операнд файла. Я врезался в стену, и у меня нет возможности попробовать на этом этапе. Я попытался использовать абсолютные пути к файлу, который не помог. Google ничего не нашел для меня.

mv работает как и ожидалось в командной строке, но как только переменные введены, программа начинает работать. Я перепробовал все возможные варианты форматирования ввода.

#!/bin/bash
echo -n "Original filename: "
read $input_filename
echo ""
echo -n "New filename: "
read $output_filename
echo ""
mv -v $input_filename  $output_filename
if [ $? == 0 ]
then
echo "Task completed successfully"
else
    echo "ERROR: File failed to be renamed. Exiting."
fi

Вывод и связанное содержимое файла.

davevm@davevm-VirtualBox:~/lab10$ ls
helloworld  lab10.sh
davevm@davevm-VirtualBox:~/lab10$ ./lab10.sh 
Original filename: helloworld

New filename: copy1

mv: missing file operand
Try 'mv --help' for more information.
ERROR: File failed to be renamed. Exiting.

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Встроенная команда read принимает имя переменной в качестве аргумента.

Используйте read filename, а не read $filename.

Вы также должны заключать аргументы в команду mv:

mv -v "$input_filename" "$output_filename"
0 голосов
/ 12 июля 2019

При отладке сценариев оболочки часто полезно добавить строку set -x в начало файла, которая будет выводить все команды по мере их выполнения, чтобы точно показать, что происходит.С вашим сценарием, который показывает, что вывод:

+ mv -v
mv: missing file operand

Хмм, похоже, что ваши $input_filename и $output_filename переменные не установлены.При поиске документов на read ошибка становится очевидной.Вы не должны ставить имена переменных перед $ при их установке, поэтому read $input_filename становится read input_filename, и то же самое для чтения выходного имени файла

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...