На жаль, не існує жодного способу викликати додаток у командному рядку за його ім'ям. Надання цієї функції означатиме ненадійний додатковий аналіз для встановлених програм, а деякі вважають це недоліком безпеки. Однак ви можете зробити розбір самостійно за допомогою сценарію, який шукає та витягує ім’я кожного розширення / програми, поки не знайде ім'я, яке ви шукаєте:
/usr/local/bin/chrome-app-by-name:
#!/bin/zsh
emulate -R zsh -o extendedglob -o nullglob
setopt rematchpcre ;# recommended, I'm so used to PCRE, I sometimes forget what doesn't work in Regex
Chrome_Profile=Default ;# or "Profile 1" ...
cd ${XDG_CONFIG_HOME:-$HOME/.config}/google-chrome/${Chrome_Profile}/Extensions
foreach app in */*
# We have just called the path to each version of each extension/app.
# Next we enclose in braces - slightly unnecessary - to ensure that
# whatever version of Zsh, "manifest.json" is completely read and
# closed before we use the variable.
{
App_Manifest="$(cat <$app/manifest.json)"
}
if [[ $App_Manifest =~ '^\s*"name"\s*:\s*"([a-zA-Z 0-9_.-]+)"' ]]
then
app_name="$match[1]" ;# capture the sub-expression match for "name"
if [[ $app_name == $1 ]]
then
# For my system this is actually exec google-chrome-stable ...
exec google-chrome --app-id="${app%%/*}" $argv[2,-1]
fi
fi
end
echo "App name not found. Please use Exact, case-sensitive spelling."
Деякі програми встановлюють свої назви глибше в сценаріях - я не знаю чому! Можливо, вам доведеться переписати або додати до такого сценарію, щоб шукати файли ".desktop", ~/.local/share/applications
щоб їх "^ NAME = ..." було еквівалентно вище, а потім отримати там команду виконання.
Я не перевіряв цей сценарій - я просто написав його на льоту, щоб відповісти на ваше запитання. Я сподіваюсь, що як приклад він працює для вас, але якщо ідея не зовсім правильна, ми могли б її трохи виправити. Zsh - простий синтаксис прямого переходу в порівнянні з деякими іншими ш-сумісними оболонками. Я намагався залишити будь-які функції, для яких потрібні нові версії або модулі, крім PCRE. PCRE настільки простіше використовувати для точного узгодження шаблону, який мені часто потрібен, що я нехтую регулярним Regex більшу частину часу. Більш тривалий сценарій Perl може працювати, також більшість цього синтаксису буде працювати без змін /bin/bash
. foreach ... end
, $match[1]
масиви стилів setopt rematchpcre
,, точна система Bash Regex, і emulate
є основними винятками.
.desktop
файл у~/.local/share/applications
(перетягніть його через відкрите вікно gedit), ви побачите правильну команду вExec=
рядку.