К сожалению, нет никакого способа вызвать приложение в командной строке по его имени. Предоставление этой функции будет означать ненадежный дополнительный анализ для установленных приложений, и некоторые будут считать это недостатком безопасности. Однако вы можете выполнить синтаксический анализ самостоятельно, используя скрипт, который ищет и извлекает имя каждого расширения / приложения, пока не найдет искомое имя:
/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 - простой прямой синтаксис по сравнению с некоторыми другими sh-совместимыми оболочками. Я попытался исключить любые функции, которые требуют новых версий или модулей, кроме PCRE. PCRE настолько проще в использовании для точного сопоставления с образцом, что мне часто нужно, что я чаще всего пренебрегаю регулярными регулярными выражениями. Более длинный Perl-скрипт может работать, также большая часть этого синтаксиса будет работать без изменений /bin/bash
. foreach ... end
, $match[1]
массивы стилей, setopt rematchpcre
точный системный синтаксис Bash Regex и emulate
основные исключения.
.desktop
файл в~/.local/share/applications
(перетащите его поверх открытого окна Gedit), вы увидите правильную команду вExec=
строке.