LINUX.ORG.RU

Разное поведение grep

 , ,


0

1

CRUX

# pkginfo -i | egrep '(pcre|grep)'
grep 3.4-2
libpcre 8.44-1
# ldd /sbin/switch_root | grep -o "/.* "
/lib/libc.so.6 
/lib/ld-linux-x86-64.so.2

Manjaro

# pacman -Q | egrep "(pcre|grep)"
grep 3.4-1
pcre 8.44-1
pcre2 10.35-1
# ldd /sbin/switch_root | grep -o "/.* "
/usr/lib/libc.so
/lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2

Вот и как писать после этого на POSIX shell. -_-

В итоге сделал так.

lddtree() {
	if test "$1" = ""; then
		return 0
	fi

	echo "$1"

	for dep in $(ldd "$1" | grep "=> /" | cut -d " " -f 3); do
		lddtree "$dep"
	done
}

Потому как предыдущий вариант, с grep -o "/.* ", радостно сообщал:

ldd: ./=>: Нет такого файла или каталога
      =>
        Failure []
      /lib64/ld-linux-x86-64.so.2
        Failure []
      /usr/bin/mv
        Failure []
      /usr/lib64/ld-linux-x86-64.so.2
        Failure []
      /usr/lib/ld-linux-x86-64.so.2
        Failure []
      /usr/lib/libacl.so.1
        Failure []
      /usr/lib/libattr.so.1
        Failure []
      /usr/lib/libc.so.6
        Failure []
★★★★★

А в чем виноват grep? он какую строку получает, ту, в соответствие с рег.выражением и обрабатывает. Он же ничего не знает о том, что ldd показывает симлинк.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.