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);
Несколько вещей :если 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
в сценарии или иным образом изменить его перед запуском.