Это зависит от того, какой формат вывода вы хотите.
apt-cache policy показывает текущие источники с приоритетом, применяемым к каждому:
~ apt-cache policy
Package files:
100 /var/lib/dpkg/status
release a=now
500 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial/main i386 Packages
release v=16.04,o=LP-PPA-webupd8team-java,a=xenial,n=xenial,l=Oracle Java (JDK) 8 / 9 Installer PPA,c=main,b=i386
origin ppa.launchpad.net
500 http://ppa.launchpad.net/webupd8team/java/ubuntu xenial/main amd64 Packages
release v=16.04,o=LP-PPA-webupd8team-java,a=xenial,n=xenial,l=Oracle Java (JDK) 8 / 9 Installer PPA,c=main,b=amd64
origin ppa.launchpad.net
500 http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu xenial/main i386 Packages
release v=16.04,o=LP-PPA-ubuntu-wine,a=xenial,n=xenial,l=Wine Team PPA,c=main,b=i386
origin ppa.launchpad.net
500 http://ppa.launchpad.net/ubuntu-wine/ppa/ubuntu xenial/main amd64 Packages
release v=16.04,o=LP-PPA-ubuntu-wine,a=xenial,n=xenial,l=Wine Team PPA,c=main,b=amd64
origin ppa.launchpad.net
500 http://ppa.launchpad.net/jonathonf/vim/ubuntu xenial/main i386 Packages
release v=16.04,o=LP-PPA-jonathonf-vim,a=xenial,n=xenial,l=Vim,c=main,b=i386
origin ppa.launchpad.net
500 http://ppa.launchpad.net/jonathonf/vim/ubuntu xenial/main amd64 Packages
release v=16.04,o=LP-PPA-jonathonf-vim,a=xenial,n=xenial,l=Vim,c=main,b=amd64
....
Информация здесь может быть использована в другой подходящей конфигурации, например apt preferences или конфигурации для unattended-upgrades.
Вы также можете использовать preferences :
#! /usr/bin/env python3
import aptsources.sourceslist
sources = sourcesList.SourcesList()
for source in sources:
if not (source.disabled or source.invalid):
print(source.line.strip())
дает выход:
deb http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://jp.archive.ubuntu.com/ubuntu/ xenial universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial universe
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://jp.archive.ubuntu.com/ubuntu/ xenial multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://jp.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://jp.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb-src http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb-src http://security.ubuntu.com/ubuntu xenial-security universe
Вы можете просто использовать расширение bash Parameter Expansion (точнее, расширение подстроки), чтобы указать диапазон, это также работает с позиционными параметрами. Для $3 ... $n это будет:
"${*:3}" # expands to "$3 $4 $5 …"
"${@:3}" # expands to "$3" "$4" "$5" …
Вы можете попробовать его следующим образом:
$ bash -c 'echo "${@:3}"' 0 1 2 3 4 5 6
3 4 5 6
Обратите внимание, что в этом примере $0 на самом деле заполненный первым аргументом 0, когда он используется в скрипте $0, вместо этого заполняется именем скрипта, который, конечно, является первым аргументом bash, а именно, что он обычно не воспринимается как таковой. Итак, здесь мы имеем $0 = 0, $1 = 1 и т. Д., А ${@:3} выбирает каждый аргумент, начинающийся с $3.
Дальнейшее чтение:
[d6 ] bash-hackers.org: Обработка позиционных параметровВы можете использовать расширение bash Parameter Expansion, чтобы указать диапазон, это также работает с позиционными параметрами. Для $3 ... $n это будет:
"${@:3}" # expands to "$3" "$4" "$5" …
"${*:3}" # expands to "$3 $4 $5 …"
Имейте в виду, что оба $@ и $* игнорируют первый аргумент $0. Если вы задаетесь вопросом, какой из них использовать в вашем случае: очень вероятно, что вы хотите указать $@. Не используйте $*, если вы явно не хотите, чтобы аргументы указывались отдельно.
Вы можете попробовать это следующим образом:
$ bash -c 'echo "${@:3}"' 0 1 2 3 4 5 6
3 4 5 6
$ echo 'echo "${@:3}"' >script_file
$ bash script_file 0 1 2 3 4 5 6
2 3 4 5 6
Обратите внимание, что в первый пример $0 заполняется первым аргументом 0, тогда как при использовании в скрипте $0 вместо него заполняется имя скрипта, как показывает второй пример. Имя скрипта bash, конечно, очень , первый аргумент, просто, что он обычно не воспринимается как таковой - то же самое касается сценария, исполняемого и называемого «напрямую». Итак, в первом примере мы имеем $0 = 0, $1 = 1 и т. Д., А во втором - $0 = script_file, $1 = 0, $2 = 1 и т. д .; ${@:3} выбирает каждый аргумент, начинающийся с $3.
Некоторые дополнительные примеры для возможных диапазонов:
# two arguments starting with the third
$ bash -c 'echo "${@:3:2}"' 0 1 2 3 4 5 6
3 4
# every argument starting with the second to last one
# a negative value needs either a preceding space or parentheses
$ bash -c 'echo "${@: -2}"' 0 1 2 3 4 5 6
5 6
# two arguments starting with the fifth to last one
$ bash -c 'echo "${@:(-5):2}"' 0 1 2 3 4 5 6
2 3
Дальнейшее чтение:
man bash / РАСШИРЕНИЕ / Параметр Расширение bash-hackers.org: Обработка позиционных параметров TLDP Advanced Bash-Scripting Guide: Замена параметраВы можете использовать расширение bash Parameter Expansion, чтобы указать диапазон, это также работает с позиционными параметрами. Для $3 ... $n это будет:
"${@:3}" # expands to "$3" "$4" "$5" …
"${*:3}" # expands to "$3 $4 $5 …"
Имейте в виду, что оба $@ и $* игнорируют первый аргумент $0. Если вы задаетесь вопросом, какой из них использовать в вашем случае: очень вероятно, что вы хотите указать $@. Не используйте $*, если вы явно не хотите, чтобы аргументы указывались отдельно.
Вы можете попробовать это следующим образом:
$ bash -c 'echo "${@:3}"' 0 1 2 3 4 5 6
3 4 5 6
$ echo 'echo "${@:3}"' >script_file
$ bash script_file 0 1 2 3 4 5 6
2 3 4 5 6
Обратите внимание, что в первый пример $0 заполняется первым аргументом 0, тогда как при использовании в скрипте $0 вместо него заполняется имя скрипта, как показывает второй пример. Имя скрипта bash, конечно, очень , первый аргумент, просто, что он обычно не воспринимается как таковой - то же самое касается сценария, исполняемого и называемого «напрямую». Итак, в первом примере мы имеем $0 = 0, $1 = 1 и т. Д., А во втором - $0 = script_file, $1 = 0, $2 = 1 и т. д .; ${@:3} выбирает каждый аргумент, начинающийся с $3.
Некоторые дополнительные примеры для возможных диапазонов:
# two arguments starting with the third
$ bash -c 'echo "${@:3:2}"' 0 1 2 3 4 5 6
3 4
# every argument starting with the second to last one
# a negative value needs either a preceding space or parentheses
$ bash -c 'echo "${@: -2}"' 0 1 2 3 4 5 6
5 6
# two arguments starting with the fifth to last one
$ bash -c 'echo "${@:(-5):2}"' 0 1 2 3 4 5 6
2 3
Дальнейшее чтение:
man bash / РАСШИРЕНИЕ / Параметр Расширение bash-hackers.org: Обработка позиционных параметров TLDP Advanced Bash-Scripting Guide: Замена параметраВы можете использовать встроенную функцию shift:
$ help shift
shift: shift [n]
Shift positional parameters.
Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N is
not given, it is assumed to be 1.
Exit Status:
Returns success unless N is negative or greater than $#.
Ex. заданный
$ cat argtest.bash
#!/bin/bash
shift 2
echo "$*"
, тогда
$ ./argtest.bash foo bar baz bam boo
baz bam boo
Как правило, вы можете скопировать позиционные параметры в массив, удалить произвольные индексы массива и затем использовать массив для расширения до тех же нужных индексов, не теряя исходных аргументов.
Например , если мне нужны все аргументы, кроме первого, четвертого и пятого:
args=( "$@" )
unset args[0] args[3] args[4]
echo "${args[@]}"
В копии индексы сдвинуты на 1, так как $0 не является частью $@. 2]
Вы можете использовать встроенную функцию shift:
$ help shift
shift: shift [n]
Shift positional parameters.
Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N is
not given, it is assumed to be 1.
Exit Status:
Returns success unless N is negative or greater than $#.
Ex. заданный
$ cat argtest.bash
#!/bin/bash
shift 2
echo "$*"
, тогда
$ ./argtest.bash foo bar baz bam boo
baz bam boo
Как правило, вы можете скопировать позиционные параметры в массив, удалить произвольные индексы массива и затем использовать массив для расширения до тех же нужных индексов, не теряя исходных аргументов.
Например , если мне нужны все аргументы, кроме первого, четвертого и пятого:
args=( "$@" )
unset args[0] args[3] args[4]
echo "${args[@]}"
В копии индексы сдвинуты на 1, так как $0 не является частью $@.
Вы можете использовать встроенную функцию shift:
$ help shift
shift: shift [n]
Shift positional parameters.
Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N is
not given, it is assumed to be 1.
Exit Status:
Returns success unless N is negative or greater than $#.
Ex. заданный
$ cat argtest.bash
#!/bin/bash
shift 2
echo "$*"
, тогда
$ ./argtest.bash foo bar baz bam boo
baz bam boo
Как правило, вы можете скопировать позиционные параметры в массив, удалить произвольные индексы массива и затем использовать массив для расширения до тех же нужных индексов, не теряя исходных аргументов.
Например , если мне нужны все аргументы, кроме первого, четвертого и пятого:
args=( "$@" )
unset args[0] args[3] args[4]
echo "${args[@]}"
В копии индексы сдвинуты на 1, так как $0 не является частью $@.