Использование параметров строки команды -в качестве места назначения для cp и mv в сценарии bash

Зависит от того, что у вас есть на коробке ARM. У вас есть uuencode? base64? perl?

В основном вы конвертируете двоичный файл в ASCII с помощью некоторой программы-оболочки, отправляете файл ASCII на удаленную машину, а затем разворачиваете его обратно в двоичный файл.

Так, например

uuencode myfile > myfile.uue

Теперь отправьте myfile.uue на удаленный конец

Затем на удаленном конце

uudecode myfile.uue

Есть много способов обернуть двоичный код в ASCII; uuencodeи base64— два распространенных метода.Не зная, что у вас есть на машине, невозможно понять, какой метод будет лучше для вас.

После того, как вы разобрались, как это сделать , затем вы можете использовать этот метод для передачи лучшей программы, такой как minicomили rz, и использовать ее. В основном используйте оболочку ASCII для «запуска» надежного процесса передачи.

3
04.11.2020, 11:32
1 ответ

Вам не хватает обязательного :после dв строке while getopts, если -dдолжен принимать параметр. Поэтому ваш copy_destпуст, и, следовательно, cpжалуется на «отсутствующий операнд». Если вы добавите «отладочные» строки, такие как

echo "Source parameter: $copy_source"
echo "Destination parameter: $copy_dest"

после цикла вы увидите проблему. Чтобы решить, просто добавьте::

while getopts s:d: flag
do
  ...
done

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

cp "$copy_source" "$copy_dest"

Кроме того , имейте в виду, что запуск скрипта как

sh test_cp.sh

переопределит строку shebang -#!/bin/bash, и вы не можете быть уверены, что она выполняется под bash! Если вы хотите убедиться, что используется правильная оболочка, вы можете явно указать

bash test_cp.sh arguments

или сделайте файл сценария исполняемым и запустите его как

./test_cp.sh arguments
5
18.03.2021, 22:53

Теги

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