Estou no Ubuntu 11.04, Gnome 2. Em certo momento, instalei o Adobe Reader ( acroread
), no entanto, "off-tree" (em um local não padrão) - e notei algo estranho sobre isso executável.
Primeiro, which
relatórios:
$ which acroread
/media/mydisk/AdobeReader/Adobe/Reader9/bin/acroread
Ok, então está em uma partição diferente da raiz do sistema /
; Neste caso, esperaria que um symlink para este acroread
estivesse presente algures no $PATH
, por ex. em código%. Então, vamos tentar /usr/bin
:
$ locate acroread
~/.icons/All-blacks/scalable/apps/acroread.png
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/__init__.py
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/__init__.pyc
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/script.py
/usr/lib/pymodules/python2.7/orca/scripts/apps/acroread/script.pyc
/usr/share/app-install/desktop/acroread.desktop
/usr/share/app-install/icons/acroread.png
/usr/share/pyshared/orca/scripts/apps/acroread
/usr/share/pyshared/orca/scripts/apps/acroread/__init__.py
/usr/share/pyshared/orca/scripts/apps/acroread/script.py
/usr/share/scribus-trunk/icons/acroread16.png
/usr/share/scribus-trunk/icons/acroread22.png
/usr/share/scribus-trunk/icons/acroread32.png
Estranho - nada aqui parece relacionado, exceto por locate
. Lembro-me que no Gnome, é possível "registrar" um aplicativo colocando um arquivo acroread.desktop
em um diretório de sistema respectivo; mas se eu verificar .desktop
:
$ cat /usr/share/app-install/desktop/acroread.desktop
[Desktop Entry]
X-AppInstall-Package=acroread
X-AppInstall-Proprietary=true
X-AppInstall-Channel=natty-partner
X-AppInstall-LicenseUri=/usr/share/app-install/channels/natty-partner.eula
X-AppInstall-Architectures=i386,amd64
Encoding=UTF-8
Name=Adobe Reader 9
Icon=acroread.png
Terminal=false
Type=Application
Categories=Application;Office;Viewer;
StartupNotify=true
... não há nada sobre acroread.desktop
location ?! Na verdade, esse arquivo /media/mydisk
parece um ícone pré-preparado, que iniciaria o instalador se você clicasse nele!
Então como é que .desktop
encontra este executável - numa partição diferente da do sistema? Talvez seja meu which
?:
$ grep 'acro\|Adobe' ~/.bashrc
$
Não, nada lá.
Então - como o sistema sabe que quando digito .bashrc
no terminal, ele deve rodar acroread
- e ainda não há nenhum link simbólico no caminho do sistema, nenhuma menção em /media/mydisk/.../acroread
, e nem mesmo qualquer arquivos relevantes do Gnome ~/.bashrc
no sistema de arquivos raiz,?
EDIT: O shell que eu uso é .desktop
e bash
relatórios:
$ type acroread
acroread is hashed (/media/mydisk/AdobeReader/Adobe/Reader9/bin/acroread)
Eu também tentei isso:
$ while read line; do if [ -f "${line}" ]; then grep -rH 'acroread' "${line}"; fi; done < <(locate applications)
/usr/share/application-registry/gnome-vfs.applications:acroread
/usr/share/application-registry/gnome-vfs.applications: command=acroread
mas o type
não contém muito sobre a localização:
$ grep -A7 acroread /usr/share/application-registry/gnome-vfs.applications
acroread
command=acroread
name=Adobe Acrobat Reader
can_open_multiple_files=true
expects_uris=false
requires_terminal=false
mime_types=application/pdf
applix
EDIT2: como @MichaelHomer observou, o motivo pelo qual o shell pode chamar esse executável é que o diretório estava no gnome-vfs.applications
:
$ for path in ${PATH//:/ }; do echo "$path" | grep 'Adobe\|acro'; done
/media/mydisk/AdobeReader/Adobe/Reader9/bin
No entanto, o estranho agora é: como este diretório acabou em $PATH
? Como mencionado anteriormente, certamente não sendo adicionado ao meu $PATH
- ou, nesse caso, em qualquer .bashrc
:
$ while read fnline; do if [ -f "${fnline}" ]; then echo "...(${fnline})..."; grep -rH 'acro\|Adobe' "${fnline}"; fi; done < <(locate bashrc)
...(/etc/bash.bashrc)...
...(/etc/skel/.bashrc)...
...(~/.bashrc)...
...(~/.bashrc-orig)...
...(~/.bashrc_mine)...
...(/home/aaa/.bashrc)...
...(/home/bbb/.bashrc)...
...(/usr/share/base-files/dot.bashrc)...
...(/usr/share/doc/adduser/examples/adduser.local.conf.examples/bash.bashrc)...
...(/usr/share/doc/adduser/examples/adduser.local.conf.examples/skel/dot.bashrc)...
... então a questão agora é: como este diretório acabou no caminho?