make clean
предназначен только для цели deb-pkg
. Взгляните наscripts/package/Makefile
:
deb-pkg: FORCE
$(MAKE) clean
$(call cmd,src_tar,$(KDEB_SOURCENAME))
$(MAKE) KBUILD_SRC=
+$(call cmd,builddeb)
bindeb-pkg: FORCE
$(MAKE) KBUILD_SRC=
+$(call cmd,builddeb)
Если вместо этого вы построите bindeb-pkg
, он не сделает очистку. Вам, вероятно, все равно не нужны исходные пакеты.
Я подозреваю, что он делает очистку, потому что не хочет архивировать артефакты сборки в исходном архиве.
Отказ от ответственности:
Из приведенного выше обсуждения я реализовал решение. Это далеко не то, о чем я мечтал, из-за многословия ${args _array[1]} по сравнению с $1. Делает источник менее читаемым. Таким образом, улучшения или лучшее решение по-прежнему приветствуются.
Источник:
Проверено, примерно так:
#!/bin/bash
#########################
# DEBUG
#########################
# set -x
PS4='${xchars:-+} ${BASH_SOURCE}:${LINENO} (${FUNCNAME[@]}) + ' # full stack
#########################
# INITIAL ARGS FOR TEST
#########################
set -- a b c d e f g h
#########################
# UTILITIES
#########################
args_array=( "$@" ) # script args here
args_shift() # Usage readability OK, replaces shift <n>
{
typeset n=${1:-1}
echo "args_shift $1 in ${FUNCNAME[1]} -- ${args_array[@]}"
args_array=( "${args_array[@]:$n}" ) # ${1:-1} unsupported in this context
echo "args_shift $1 in ${FUNCNAME[1]} ++ ${args_array[@]}"
}
args_set() # Usage readability OK, replaces set -- <args>
{
echo "args_set $@ in ${FUNCNAME[1]} -- ${args_array[@]}"
args_array=( "$@" ) # function args here
echo "args_set $@ in ${FUNCNAME[1]} ++ ${args_array[@]}"
}
# Usage
# search/replace OK, and good readability afterward
# shift <n> ---> args_shift <n>
# set -- <args> ---> args_set <args>
# search/replace OK, but bad readability afterward, and refactoring--
# $@ ---> ${args_array[@]}
# $# ---> ${#args_array[@]}
# $1 ---> ${args_array[0]} !!! 1 -> 0
# $2 ---> ${args_array[1]} !!! 2 -> 1
# etc
#########################
# TEST
#########################
f()
{
args_shift
}
g()
{
args_set A B C D
}
# main
echo "main -- ${args_array[@]}"
f
args_shift 2
f
g
args_shift
f
echo "main ++ ${args_array[@]}"
Выход:
main -- a b c d e f g h
args_shift in f -- a b c d e f g h
args_shift in f ++ b c d e f g h
args_shift 2 in main -- b c d e f g h
args_shift 2 in main ++ d e f g h
args_shift in f -- d e f g h
args_shift in f ++ e f g h
args_set A B C D in g -- e f g h
args_set A B C D in g ++ A B C D
args_shift in main -- A B C D
args_shift in main ++ B C D
args_shift in f -- B C D
args_shift in f ++ C D
main ++ C D
Замечания:
Моя ситуация:
Есть как минимум 616 вхождений, о которых нужно позаботиться... внимательно (некоторые из них находятся в функциях,сценарии awk или perl и т. д.)
for s in shift 'set --' '$@' '${@' '$*' '${*' '$1' '${1' '$2' '${2' '$3' '${3' '$4' '${4' '$5' '${5'; do
printf '%-10s: %d\n' "$s " "$(fgrep $s <script>|wc -l)"
done # |awk '{sum+=$NF};END{print sum}'
shift : 44
set -- : 189
$@ : 39
${@ : 2
$* : 7
${* : 0
$1 : 182
${1 : 79
$2 : 48
${2 : 3
$3 : 15
${3 : 0
$4 : 8
${4 : 0
$5 : 0
${5 : 0