Folosind apt-file
Sunt capabil să găsesc pachetele care oferă anumite executabile, de exemplu:
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/wget
Pai, de fapt:
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/wget | grep "/wget$"
(Pentru că altfel ar returna toate pachetele care conțin executabile care încep cu wget
.)
Acum alergam:
EXEC_NAME="x86_64-w64-mingw32-g++"
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME} | grep „${EXEC_NAME}$”
Și, în mod surprinzător, nu returnează nimic. De ce? Pentru că niciun pachet nu oferă un fișier cu acest nume.
Daca alerg:
EXEC_NAME="x86_64-w64-mingw32-g++"
sudo apt-file search {/bin,/sbin,/usr/bin/,/usr/sbin}/${EXEC_NAME}
Am urmatorul rezultat:
g++-mingw-w64-x86-64-posix: /usr/bin/x86_64-w64-mingw32-g++-posix
g++-mingw-w64-x86-64-win32: /usr/bin/x86_64-w64-mingw32-g++-win32
ceea ce înseamnă că nu există niciun pachet de furnizare x86_64-w64-mingw32-g++
.
Dar după un timp am găsit asta g++-mingw-w64-x86-64-posix
nu oferă doar executabilul g++-mingw-w64-x86-64-posix
, dar și un alias sau un link simbolic numit g++-mingw-w64-x86-64
.
În acest caz, a fost ușor de înțeles, deoarece pachetul s-a întâmplat să conțină un alt binar cu un nume foarte asemănător. Acum problema mea este că trebuie să automatizez acest lucru într-un mod care să funcționeze pentru orice alias/link simbolic, chiar și pentru cele care au un nume complet diferit.
Cum pot face acest lucru?
Editați | ×:
Aliasul este creat în fișier g++-mingw-w64-x86-64-posix.postinst
al g++-mingw-w64-x86-64-posix
pachet, în cazul în care vă ajută:
update-alternatives --install /usr/bin/x86_64-w64-mingw32-g++ x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix 30 \
--slave /usr/bin/x86_64-w64-mingw32-c++ x86_64-w64-mingw32-c++ /usr/bin/x86_64-w64-mingw32-c++-posix
Edit 2:
Există o modalitate de a căuta conținutul fișierului din toate pachetele? .postinst
fisiere? Poate prin descărcarea tuturor .postinst
fișiere într-un cache? Poate că asta ar putea fi făcut prin descărcarea antetului de fișier al fiecărui pachet pentru a vedea la ce octeți din arhive se află fișierele .postinst și apoi folosiți cererile de interval HTTP pentru a le descărca?
Edit3:
Acest lucru nu schimbă nimic, dar am găsit în loc de grep și cut, puteți doar să utilizați -X
si -l
steag. Acest lucru face comanda un pic mai scurtă:
sudo apt-file search -l -x "^/(bin|sbin|usr/bin|usr/sbin)/${EXEC_NAME}$" | cap -1