Je ne trouve pas comment lancer une application chrome à partir d'une bash?
J'essaie d'y parvenir avec Postman .
De google-chrome -h
, j'ai essayé (malheureusement) ceux-ci:
$ google-chrome --app="Postman"
$ google-chrome --extension="postman"
Le résultat est qu'une nouvelle fenêtre vide est ouverte.
Ma première hypothèse est que l'application est stockée sur ma machine et que je dois ouvrir un fichier spécifique (l'index de l'application) pour la lancer.
Est-il possible d'y parvenir?
Et si c'est possible, comment faire?
Répondu grâce à @JacobVlijm.
Pour exécuter une application chrome à partir de la ligne de commande, procédez comme suit:
google-chrome --app-id=[app_id]
En supposant que le chemin de google-chrome
est /opt/google/chrome/google-chrome
.
Pour récupérer l'id de l'application, recherchez la première occurrence du nom de l'application dans /home/[user]/.local/share/applications
.
Malheureusement, non, il est impossible d'appeler une application sur la ligne de commande par son nom. Fournir cette fonctionnalité signifierait une analyse supplémentaire non fiable pour les applications installées et certains considéreraient cela comme un défaut de sécurité. Vous pouvez toutefois vous analyser vous-même avec un script qui recherche et extrait le nom de chaque extension/application jusqu'à ce qu'il trouve le nom que vous recherchez:
/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."
Certaines applications définissent leurs noms plus profondément dans les scripts - je ne sais pas pourquoi! Vous devrez peut-être réécrire ou ajouter à un script tel que celui-ci pour rechercher les fichiers ".desktop" dans ~/.local/share/applications
pour leur équivalent "^ NAME = ...", puis obtenir la commande d'exécution.
Je n'ai pas testé ce script - je l'ai simplement écrit à la volée pour répondre à votre question. J'espère que, à titre d'exemple, cela fonctionne pour vous, mais si l'idée n'est pas tout à fait correcte, nous pourrions l'améliorer un peu. Zsh est une syntaxe simple et directe comparée à d'autres shells compatibles sh. J'ai essayé de laisser de côté les fonctionnalités nécessitant de nouvelles versions ou de nouveaux modules, à l'exception de PCRE. PCRE est tellement plus facile à utiliser pour l’appariement exact des motifs dont j’ai souvent besoin que je néglige le regex régulier la plupart du temps. Un script Perl plus long pourrait fonctionner. La plupart de cette syntaxe sera exécutée sans modification dans /bin/bash
. foreach ... end
, $match[1]
style arrays, setopt rematchpcre
, la systax exacte de Bash Regex et emulate
sont les principales exceptions.
chmod +x *.desktop
properties
name__Command
qui est répertoriée à mi-chemin se trouve la commande utilisée pour ouvrir cette application.