cp: недопустимая опция -- 'h'

asm-generic/set_memory.h:int set_memory_ro(unsigned long addr, int numpages);
asm-generic/set_memory.h:int set_memory_rw(unsigned long addr, int numpages);
asm-generic/set_memory.h:int set_memory_x(unsigned long addr, int numpages);
asm-generic/set_memory.h:int set_memory_nx(unsigned long addr, int numpages);
1
14.03.2020, 06:19
1 ответ

Несколько вещей :если THIS_DIRсодержит dirname -bash, cp -Ri $THIS_DIR/...расширяется до эквивалентаcp -Ri dirname -bash/...(из-за разделения слов ), то есть cpполучает dirnameи -bash/...как отдельные аргументы. Этот второй начинается с тире, поэтому он пытается интерпретировать буквы в нем как варианты. GNU cp не имеет опции -h, поэтому выдает ошибку.

Вы можете предотвратить разделение с помощью кавычек, но это мало что значит, так как у вас, вероятно, нет каталога с именем dirname -bashс пробелом и всем остальным.

Глядя на скрипт, THIS_DIRустанавливается через

THIS_DIR="`dirname $0`"

обратите внимание на обратные кавычки, они начинают подстановку команд, запуская команду dirname. Если их удалить, будет назначена литеральная строка dirname....

Опять же, $0— это имя запущенной оболочки или скрипта. Скрипт, вероятно, использует эту команду, чтобы узнать, где находится сам скрипт, например. путь /foo/bar, если вы запустили /foo/bar/scriptname.sh. Но в интерактивной оболочке, запущенной нормально, $0, вероятно, просто содержит bashили -bash, если это оболочка входа в систему.

Как сказал cutrightjm в комментариях, этот сценарий предназначен для запуска как сценарий, а не как команды, индивидуально скопированные в терминал. (Расширения по-прежнему можно было заключать в кавычки.)

Конечно, вы можете изменить назначение на THIS_DIRв сценарии или иным образом изменить его перед запуском.

2
28.04.2021, 23:20

Теги

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