น่าเสียดายที่ไม่มีวิธีใดในการเรียกแอปที่บรรทัดคำสั่งด้วยชื่อ การให้ฟีเจอร์นี้จะหมายถึงการแยกวิเคราะห์พิเศษที่ไม่น่าเชื่อถือสำหรับแอพที่ติดตั้งและบางอันอาจถือว่าเป็นข้อบกพร่องด้านความปลอดภัย อย่างไรก็ตามคุณสามารถแยกวิเคราะห์ตัวเองด้วยสคริปต์ที่ค้นหาและแยกชื่อของส่วนขยาย / แอปแต่ละรายการจนกว่าจะพบชื่อที่คุณค้นหา:
/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 นั้นง่ายต่อการใช้งานมากสำหรับการจับคู่รูปแบบที่แน่นอนฉันมักจะต้องการให้ฉันละเลย Regex ปกติเป็นส่วนใหญ่ Perl /bin/bash
สคริปต์ไม่สามารถทำงานยังมากที่สุดของรูปแบบนี้จะทำงานในไม่แปร foreach ... end
, $match[1]
อาร์เรย์สไตล์setopt rematchpcre
ที่ Systax แน่นอนของทุบตี Regex และemulate
เป็นข้อยกเว้นหลัก
.desktop
ไฟล์ที่เกี่ยวข้องใน~/.local/share/applications
(ลากไปที่หน้าต่าง gedit ที่เปิด) คุณสามารถเห็นคำสั่งที่ถูกต้องในExec=
บรรทัด