Debian: не может удалить SymLink в / sys /: операция не разрешена

Давайте добавим еще один отладочный код.

all: $TARGETS
define f2
$$(info f2 called on $(1))
.PHONY: target$(1)
target$(1):
    echo "We are in $(1)"
TARGETS+=target$(1)
endef

define f1
VAR$(1)=ValueWith$(1)
$(info too early: VAR$(1) is $$(VAR$(1)))
$$(info right time: VAR$(1) is $$(VAR$(1)))
$(eval $(call f2,$(VAR$(1))))
endef

$(eval $(call f1,CallOne))
$(eval $(call f1,CallTwo))

$(warning Warning: $(TARGETS))

Вывод:

too early: VARCallOne is $(VARCallOne)
f2 called on 
right time: VARCallOne is ValueWithCallOne
too early: VARCallTwo is $(VARCallTwo)
f2 called on 
debug.mk:18: warning: overriding commands for target `target'
debug.mk:17: warning: ignoring old commands for target `target'
right time: VARCallTwo is ValueWithCallTwo
debug.mk:20: Warning: target target
make: *** No rule to make target `ARGETS', needed by `all'.  Stop.

Проблема заключается в том, что вызов eval выполняется перед определением VAR... в момент расширения функции f1 , а не в момент обработки результата этого расширения. Необходимо отложить оценку .

Также имеется опечатка в строке 1; если вы исправите его, вы обнаружите, что целевой объект все ничего не строят, поскольку TARGETS не определен во время его использования. Необходимо объявить зависимости позже.

all:  # default target, declare it first

define f2
.PHONY: target$(1)
target$(1):
        echo "We are in $(1)"
TARGETS+=target$(1)
endef

define f1
VAR$(1)=ValueWith$(1)
$$(eval $$(call f2,$$(VAR$(1))))
endef

$(eval $(call f1,CallOne))
$(eval $(call f1,CallTwo))

$(warning Warning: $(TARGETS))
all: $(TARGETS)
-121--290400-

* в узоры оболочки соответствует 0 или более символам. Не следует путать с оператором регулярного выражения * , который означает 0 или более предшествующего атома .

В базовых узорах оболочки нет эквивалента regexp * . Тем не менее, различные оболочки имеют расширения для этого.

  • ksh имеет * (что-то) :

     ls a_ * ([a-z]) _data
    
  • можно использовать в bash с shopt -s extglob или zsh с setopt kshglob :

     shopt -s extglob
    ls a_ * ([a-z]) _data
    
  • В zsh с включенным extendedglob , # эквивалентно regexp * :

     setopt extendedglob
    ls a_[a-z]#_data
    
  • В последних версиях ksh93 также можно использовать регулярные выражения в глобусах. Здесь с расширенными регулярными выражениями:

     ls ~ (E:a_[a-z]*_data)
    

Обратите внимание, что [a-z] соответствует различным параметрам в зависимости от текущего языкового стандарта. Обычно он соответствует только 26 a - z латинским неакцентированным буквам в языковом стандарте C . В других языках он обычно больше совпадает и не всегда имеет смысл. Чтобы соответствовать букве в вашем языковом стандарте, вы можете предпочесть [[: alpha:]] .

-121--31405-

~/.zshenv загружается zsh при его запуске (за исключением случаев, когда начинается с -f или если каталог конфигурации изменяется путем установки ZDOTDIR ). Он не загружен (не может быть понят) какой-либо другой оболочкой. Таким образом, упорядочение нагрузки ~/.zshenv эквивалентно упорядочению заданий, выполняемых zsh. Установите переменную SHELL в crontab; это относится ко всем должностям.

Остерегайтесь ставить вещи на .zshenv , потому что он читается каждой оболочкой. Например, если задать переменную среды для выполнения некоторых программ в другой среде (например, вам нужны различные версии некоторых файлов или программ, поэтому необходимо задать некоторые переменные среды ... PATH ), это не будет работать, если .zshenv переопределяет эти переменные.

Если требуется задать переменные среды для интерактивных сеансов и заданий cron, не используйте .zshenv .Используйте файл, исходный из ~/.profile и crontabs. Запустите каждое задание cron с помощью . ~/.my _ environment.sh; (вы не можете сделать это глобально).

Выходные данные заданий cron отправляются по электронной почте с помощью средства локальной почты. Я не знаю, как это устроено на OSX. Вместо этого я не рекомендую использовать файл журнала, потому что cron заботится о том, чтобы отправить электронное письмо по заданию и не отправлять электронное письмо от успешных заданий (нет выходных данных, код возврата 0)). Если вы действительно хотите использовать файл журнала, запустите каждое задание с помощью команды exec > ~/cron-logs/nameofthisjob- $ (дата +\% Y\% m\% d-\% H\% M) 2 > & 1 & .

10
03.12.2018, 10:50
1 ответ

Файловая система sysfs, обычно монтируемая на /sys, точно так же, как файловая система /proc, не является типичной файловой системой, это так называемая псевдо файловая система . На самом деле он заполняется ядром, и вы не можете удалять файлы напрямую.

Итак, если поддержка ноутбуков ASUS вам не подходит, вам нужно попросить ядро ​​удалить ее. Для этого снимите соответствующий модуль :

.
sudo rmmod asus-laptop

Это приведет к удалению соответствующей записи /sys.

28
27.01.2020, 19:59

Теги

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