Очевидно, это сделано намеренно, см. # 778357 : код выхода 0 указывает на успех или временную ошибку, все остальное указывает на постоянную ошибку.
Как указано на странице руководства apt
:
ИСПОЛЬЗОВАНИЕ СКРИПТА И ОТЛИЧИЯ ОТ ДРУГИХ ИНСТРУМЕНТОВ APT
Командная строка
apt (8)
разработана как конечная пользовательский инструмент, и он может изменять поведение между версиями. Хотя он пытается не нарушать обратную совместимость, это также не гарантируется, если изменение кажется полезным для интерактивного использования.Все функции
apt (8)
также доступны в специальных инструментах APT, таких какapt-get (8)
иapt-cache (8)
. .apt (8)
просто изменяет значение по умолчанию некоторых параметров (см.apt.conf (5)
и, в частности, двоичную область видимости). Поэтому вам следует предпочесть использовать эти команды (возможно, с некоторыми включенными дополнительными параметрами) в ваших сценариях, поскольку они максимально сохраняют обратную совместимость .
Поэтому вам не следует использовать apt
в скриптах.
(Странно, что у вас есть apt
в / usr / local / bin
; учитывая, что у вас установлена последняя версия пакета apt
, у вас, вероятно, он тоже есть в / usr / bin
!)
Проблема в том, что вы используете полный путь, который включает каталог. Самый простой обходной путь — сначала cd
войти в целевой каталог, а затем запустить цикл for
:
cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "$(echo "$file" | cut -c4-)"; done
Или, используя собственные возможности оболочки по работе со строками :
cd /var/lib/jenkins/bin
for file in *; do echo mv "$file" "${file#????}"; done
В качестве альтернативы, если у вас есть perl -rename (с именем rename
в системах на базе Debian -, perl-rename
в других ), вы можете:
rename -n 's|.*/...||' /var/lib/jenkins/bin/*
Убедившись, что это работает, удалите -n
, чтобы действительно переименовать.
Однако, как указал Сандип в комментариях, если вы хотите удалить только 01-
, удалите именно это:
rename -n 's|.*/01-||' /var/lib/jenkins/bin/*