Мне понравилось учебное руководство Креншо также, потому что оно делает его абсолютно ясным, что компилятор является просто другой программой, которая читает некоторый вход и выписывает некоторым помещенным.
Read это.
Работа это, если Вы хотите, но тогда смотрите на другую ссылку о том, как больше и больше полных компиляторов действительно записаны.
И читают При Доверии Доверию , для получения подсказки о неочевидных вещах, которые могут быть сделаны в этом домене.
Не уверенный, почему большинство отправленных ответов включает извлечение имени файла .desktop ярлыков. Ваше .desktop имя файла ярлыка может быть совсем не, что имеет значение, Name
поле в файле ярлыка. Если Вы хотите создать список из установленного показа имен приложений в Тире, просто "grep", что поле под [Desktop Entry]
Элементарный код, с ударом
#!/bin/bash
for file in /usr/share/applications/*.desktop;
do
while IFS== read -r key val
do
if [[ -z $key ]]; then
continue
else
if [[ $key =~ ^\[Desktop\ Entry ]]; then
interesting_field=1
elif [[ $key =~ ^\[ ]]; then
interesting_field=0
fi
fi
[[ $interesting_field -eq 1 ]] && [[ $key == "Name" ]] && echo $val
done < $file
done
, Но это не принимает во внимание ярлыки, которые скрыты от того, чтобы быть, показало в Тире. Кто-то с лучше понимает .desktop спецификации, мог бы хотеть далее развернуть этот код для исключения подобных из ярлыков
Редактирование: другая попытка, с Python
#!/usr/bin/python
from os import listdir
from os.path import isfile, join
import ConfigParser
SHORTCUTDIR = "/usr/share/applications/"
shortcuts = [ file for file in listdir(SHORTCUTDIR) if isfile(join(SHORTCUTDIR, file)) and file.endswith(".desktop") ]
dash_shortcuts = []
for f in shortcuts:
c = ConfigParser.SafeConfigParser()
c.read(SHORTCUTDIR + f)
try:
if c.getboolean('Desktop Entry', 'NoDisplay') is True:
continue
except ConfigParser.NoOptionError:
pass
try:
if "unity" in c.get('Desktop Entry', 'NotShowIn').lower():
continue
except ConfigParser.NoOptionError:
pass
try:
if "unity" not in c.get('Desktop Entry', 'OnlyShowIn').lower():
continue
except ConfigParser.NoOptionError:
pass
dash_shortcuts += [ c.get("Desktop Entry", "Name") ]
for s in sorted(dash_shortcuts, key=str.lower):
print s
Корреспондент хочет перечислить названия всех установленных "приложений".
Относительно приложений с .desktop файлами :
/usr/share/applications
~/.local/share/applications
Name=
строка в соответствующем .desktop файле. Одним примером является "Карта символов". Exec=
. В случае "Карты символов", которая была бы gucharmap
. sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' /usr/share/applications/*.desktop
sed -ns '1F;/^\[Desktop Entry\]/,/^\[/{/^Name=/p;/^Exec=/h};${z;x;G;p}' $HOME/.local/share/applications/*.desktop
Относительно приложений без .desktop файлов :
В зависимости от того, как каждый определяет "приложение", у некоторых нет .desktop файлов.
conky
, poppler-utils
, qpdf
, xdotool
и wmctrl
считаться "приложениями"? Как они должны быть определены и перечислены их именами (предполагающий, что каждый установил их)? find
, grep
, ls
и sed
для именования еще немного? Они - приложения или являются ими нет? , Если что-нибудь , который имеет команду, считается приложением, тогда команда Linux для списка всех доступных команд и псевдонимов и , этот ответ там поможет определить их.
Для получения списка всех установленных приложений с их именами самый легкий путь состоит в том, чтобы сделать:
sudo apt-get install aptitude
aptitude -F' * %p -> %d ' --no-gui --disable-columns search '?and(~i,!?section(libs), !?section(kernel), !?section(devel))'
Это получит Вас хороший список всех установленных пакетов, которые не являются библиотеками, не ядрами, не пакетом разработки как это:
* zip -> Archiver for .zip files
* zlib1g -> compression library - runtime
* zlib1g-dev -> compression library - development
* zsh -> shell with lots of features
* zsh-common -> architecture independent files for Zsh
Это - больше завершенное, так как это также перечисляет приложения не-GUI, которые не появятся в эти .desktop
файлы
--no-gui
удален.
– Pawan
16.05.2020, 04:51
zsh
, zsh-common
и другие!
– Dinusha Naveen
16.05.2020, 04:51
--no-gui
часть, кажется it' s не там для того, что я думал, что это было.
– Kamal Paliwal
16.05.2020, 04:52
При необходимости в списке приложений, показанных, когда Вы совершаете нападки , Супер + , можно использовать ls /usr/share/applications
. Единственная вещь, которую необходимо сделать, заменить .desktop
окончание, которое является довольно простой задачей. Я делаю это с sed
:
ls /usr/share/applications | sed s/.desktop// - > installed-apps.txt
, Но можно сделать это после получения списка с помощью текстового редактора.
/usr/share/application/*.desktop
файлы don' t содержат любые специальные символы, таким образом анализирование ls
особенно в этом случае позволяется.
– Amanda
16.05.2020, 04:51
bad name.desktop
, например? Нет никакой причины рискнуть ls
здесь.
– Clay
16.05.2020, 04:52
Работайте ниже команды для наблюдения всех установленных приложений,
ls /usr/share/applications | awk -F '.desktop' ' { print $1}' -
, Если Вы захотите получить список всех установленных приложений, затем работать ниже команды,
ls /usr/share/applications | awk -F '.desktop' ' { print $1}' - > ~/Desktop/applications.txt
Это будет хранилища вышеупомянутый вывод команды к applications.txt
файл в Вашем ~/Desktop
каталог.
Также работает ниже команды на терминале для списка установленных приложений,
find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort
Для получения списка в текстовом файле, выполненный ниже Настольных записей команды
find /usr/share/applications -maxdepth 1 -type f -exec basename {} .desktop \; | sort > ~/Desktop/applications.txt
для всех установленных приложений хранятся в /usr/share/applications
каталог, где имена файлов находятся в формате application-name.desktop
.Removing эти .desktop
, часть от имен файлов даст Вам общий список установленных приложений.
Обновление:
, Поскольку @Radu предложил , можно также найти настольные записи для дополнительных установленных приложений в ~/.local/share/applications
каталог.
find /usr/share/applications ~/.local/share/applications -maxdepth 1 -type f -exec basename {} .desktop \;
ls
- в представительных целях и для некритических задач, таких как та выше - и пытаются иметь в виду это ограничение, спасибо за головы!
– Amanda
16.05.2020, 04:51
Я придумал этот ответ для людей, кто хочет использовать, избивают хороший путь. Ясно, что ответ вопроса связан со списком файлов от /usr/share/applications
, но проблема состоит в том, что ls
команда не должна анализироваться никогда . В прошлом я делал ту же ошибку, но теперь я узнал, что лучший способ состоит в том, чтобы использовать for
цикл для итерации по файлам, даже если я должен использовать еще некоторые ключи со своей драгоценной клавиатуры:
for app in /usr/share/applications/*.desktop; do echo "${app:24:-8}"; done
я также использовал в предыдущей обработке строк команды операции: удаленный от app
первые 24 символа, которые являются /usr/share/applications/
и длятся 8 символов, которые являются .desktop
.
Обновление:
Другое место, где можно найти применение, показанное Тире, ~/.local/share/applications/*.desktop
. Таким образом, необходимо выполнить следующую команду также:
for app in ~/.local/share/applications/*.desktop; do echo "${app:37:-8}"; done
Для объединения предыдущих двух команд можно использовать:
for app in /usr/share/applications/*.desktop ~/.local/share/applications/*.desktop; do app="${app##/*/}"; echo "${app::-8}"; done
Name
опция могла быть вне того диапазона номера строки, особенно с партией опций или пустых строк под[Desktop\ Entry ]
. И файл .desktop ini файл – cdlane 16.05.2020, 04:49Name
записи в .desktop you' парсинг ре, который всегда случай. Также Вы shouldn' t принимают все строки you' ре, заинтересованное с, будет на фиксированном номере строки – Amanda 16.05.2020, 04:49