Как я отображаю информацию обо всех символьных ссылках, с которыми встречаются, в данном пути?

Есть две проблемы:

Во-первых, у вас нет разрешения на выполнение:

Добавьте разрешение для вы с:

$ chmod u+x yiic

Это дает u , пользователю - вам - x , разрешение на выполнение.


Второй, отдельный вопрос, касается того, как вы вызываете программу и как она находится.
Теперь у вас есть разрешение на выполнение, но

$ yiic

, вероятно, по-прежнему выдаст вам ошибку команда не найдена .

Это потому, что выполняемая вами команда ищется в каталогах, перечисленных в переменной $ PATH , которая обычно не включает текущий каталог (и не должна включать его по соображениям безопасности).

Но вы можете указать имя файла команды для запуска, указав путь к каталогу для командного файла. Самый простой вариант - просто использовать текущий каталог:

$ ./yiic

Наконец-то это должно сработать!

Если он работает без ./ впереди, значит, у вас есть текущий каталог, . , в вашем $ PATH - взгляните на него:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin


(О, а еще есть известная проблема использования имени файла test для тестирования чего-либо ... это довольно плохая ловушка, я бы сказал - вы не первый, кого она укусила ...)

1
01.10.2014, 01:19
1 ответ

Позволяет создать простой скрипт:

#!/bin/bash            

mypath=$1
while [[ "${#mypath}" -gt 1 ]]; do
      file "$mypath"
      mypath="$(dirname $mypath)"
done

Test:

$ ./linksinfo /usr/src/linux/kernel/../../../../bin/sh
/usr/src/linux/kernel/../../../../bin/sh: symbolic link to `bash'
/usr/src/linux/kernel/../../../../bin: directory
/usr/src/linux/kernel/../../../..: directory
/usr/src/linux/kernel/../../..: directory
/usr/src/linux/kernel/../..: directory
/usr/src/linux/kernel/..: directory
/usr/src/linux/kernel: directory
/usr/src/linux: symbolic link to `linux-3.14.14-gentoo'
/usr/src: directory
/usr: directory

Edit

Это не проверяет/показывает все компоненты пути, но вывод в вопросе также не делает этого. Например, после

/home/nix/.nix-profile -> /nix/var/nix/profiles/default

возможно, что любой из /nix, /nix/var/, /nix/var/nix, /nix/var/nix/profiles или /nix/var/nix/profiles/default сам по себе является ссылкой. Однако ваш вывод пропускает это и проверяет только /nix/var/nix/profiles/default/lib. Аналогичное происходит и с

/nix/var/nix/profiles/default/lib/libQt5OpenGL.so -> /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1/lib/libQt5OpenGL.so

/nix/store/nix/store и /nix/store/33xkmx1f1040s5nb15x7hx2cqmyw1jyi-qt-5.3.1. Короче говоря, я предлагаю переосмыслить проблему и подумать о том, чего вы на самом деле хотите достичь. Может быть достаточно простого прочитать ссылку [-f] или realpath [-e]?

.
1
27.01.2020, 23:52

Теги

Похожие вопросы