Эта информация устарела, и стек обычно больше не исполняется:
00007ffd884fa000 356K rw--- [ stack ]
GCC нужен исполняемый стек, если он генерирует трамплины для вызовов вложенных функций . Эти батуты представляют собой небольшие фрагменты кода, сгенерированные во время выполнения и хранящиеся в стеке, поэтому, если они используются, стек должен быть исполняемым. Компилятор отслеживает это требование и выводит флаг в двоичных файлах (библиотеках и исполняемых файлах), чтобы указать, нужен ли им исполняемый стек. Вы можете видеть значение этого флага и управлять им с помощью execstack (8)
.
Слово, начинающееся с тире, обычно рассматривается как вариант. Когда вы делаете ls *
, команда ls
получает ls 001.png -002.png...
и видит -002.png
как набор опций, которые она не понимает. То же самое для многих команд, таких как cp
, mv
,...
Решение #1 :добавьте к файлам префикс пути. Будет работать во всех случаях.
ls./*
Решение #2 :многие команды, особенно в мире GNU, принимают в качестве параметра двойное -тире, указывающее, что следующее не является параметром
ls -- *
Тем не менее, начальные дефисы не влияют на цикл for
.
Что касается «значения, слишком большого для базы», это связано с тем, что -008
считается восьмеричным числом, поскольку оно начинается с 0. Однако 8 не является допустимой восьмеричной цифрой.Быстрым решением было бы использоватьbc
:
printf -v basename_new %04d "$(bc <<< "${basename} + 10")"
Проблема с if
вызвана пустым basename_new
и исчезнет с приведенным выше исправлением.
10#-008
не сделает -008
десятичным. Я думаю, это потому, что 10#
должно стоять перед цифрами, а не перед знаками.
Сzsh
:
$ autoload zmv
$ zmv -n '((-|)<->).(png|jpg)' '${(l:4::0:)$(($1 + 10))}.$3'
mv -- -002.jpg 0008.jpg
mv -- 0043.png 0053.png
mv -- 0044.png 0054.png
mv -- 0052.png 0062.png
mv -- -005.png 0005.png
mv -- -008.png 0002.png
(удалите -n
чтобы сделать это ).
(-|)
glob:-
или "" :необязательный-
<->
glob :любая последовательность десятичных цифр (подобная <x-y>
но без ограничений ). ${(l:4::0:)param}
:заполнение слева (и усечение )длины 4 нулями. $(($1 + 10))
:данные, захваченные первой парой (...)
в шаблоне, увеличенные на 10 (zsh
, не имеют той проблемы, что числа с ведущими 0 обрабатываются как восьмеричные; даже если вы установите параметр octalzeroes
, это не повлияет на zmv
, который возвращается к нормальным параметрам zsh во время работы.