Ne yazık ki, bir uygulamayı komut satırında adıyla çağırmanın bir yolu yoktur. Bu özelliğin sağlanması, yüklü uygulamalar için güvenilir olmayan ekstra ayrıştırma anlamına gelir ve bazıları bunun bir güvenlik açığı olduğunu düşünür. Ancak ayrıştırmayı, aradığınız adı bulana kadar her uzantının / uygulamanın adını arayan ve ayıklayan bir komut dosyasıyla kendiniz yapabilirsiniz:
/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."
Bazı uygulamalar adlarını komut dosyalarında daha derinlere koyuyor - nedenini bilmiyorum! ~/.local/share/applications
Yukarıdakine eşdeğer "^ NAME = ..." için ".desktop" dosyalarını aramak için yeniden böyle bir komut dosyasını yeniden yazmanız veya eklemeniz gerekebilir ve ardından yürütme komutunu oraya getirin.
Bu senaryoyu test etmedim - sadece sorunuzu cevaplamak için anında yazdım. Umarım örnek olarak sizin için çalışır, ancak fikir tam olarak doğru değilse, biraz değiştirebiliriz. Zsh, diğer bazı sh uyumlu kabuklara kıyasla basit, düz ileri sözdizimidir. PCRE dışında yeni sürümler veya modüller gerektiren özellikler bırakmaya çalıştım. PCRE'nin tam desen eşleşmesi için kullanımı çok daha kolaydır, çoğu zaman düzenli Regex'i ihmal etmem gerekir. Daha uzun bir Perl betiği çalışabilir, ayrıca bu sözdiziminin çoğu değiştirilmemiş olarak çalışacaktır /bin/bash
. foreach ... end
, $match[1]
stil dizileri, setopt rematchpcre
Bash Regex'in tam sistaksı emulate
ve ana istisnalardır.
.desktop
dosyayı~/.local/share/applications
(açılmış bir gedit penceresinin üzerine sürükleyin) açarsanız,Exec=
satırda doğru komutu görebilirsiniz .