Bash 如何删除'$'\n';附加到ldd列表的字符

Bash 如何删除'$'\n';附加到ldd列表的字符,bash,shell,Bash,Shell,我试图将二进制依赖项复制到其他文件夹,因此我使用ldd查看应该复制什么 但是,复制时脚本失败。复制二进制依赖项时,它“显示”“$”\n“个字符 有点不对劲,但我不知道是什么。已尝试按命令运行命令,但看不到故障 这里有什么问题 谢谢 脚本代码 脚本输出 我使用此脚本的目的是: copydep.sh 按如下方式运行: $ mkdir /tmp/test $ bash copydep.sh /bin/ls /tmp/test ---> copy binary itself /bin ->

我试图将二进制依赖项复制到其他文件夹,因此我使用
ldd
查看应该复制什么

但是,复制时脚本失败。复制二进制依赖项时,它“显示”
“$”\n“
个字符

有点不对劲,但我不知道是什么。已尝试按命令运行命令,但看不到故障

这里有什么问题

谢谢

脚本代码 脚本输出
我使用此脚本的目的是:

copydep.sh

按如下方式运行:

$ mkdir /tmp/test
$ bash copydep.sh /bin/ls /tmp/test
---> copy binary itself
/bin -> /tmp/test/bin
'/bin/ls' -> '/tmp/test/bin/ls'
---> copy libraries
/lib -> /tmp/test/lib
/lib/x86_64-linux-gnu -> /tmp/test/lib/x86_64-linux-gnu
'/lib/x86_64-linux-gnu/libselinux.so.1' -> '/tmp/test/lib/x86_64-linux-gnu/libselinux.so.1'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/tmp/test/lib/x86_64-linux-gnu/libc.so.6'
'/lib/x86_64-linux-gnu/libpcre.so.3' -> '/tmp/test/lib/x86_64-linux-gnu/libpcre.so.3'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/tmp/test/lib/x86_64-linux-gnu/libdl.so.2'
/lib64 -> /tmp/test/lib64
'/lib64/ld-linux-x86-64.so.2' -> '/tmp/test/lib64/ld-linux-x86-64.so.2'
'/lib/x86_64-linux-gnu/libpthread.so.0' -> '/tmp/test/lib/x86_64-linux-gnu/libpthread.so.0'

# Result:
$ tree /tmp/test/
/tmp/test/
├── bin
│   └── ls
├── lib
│   └── x86_64-linux-gnu
│       ├── libc.so.6
│       ├── libdl.so.2
│       ├── libpcre.so.3
│       ├── libpthread.so.0
│       └── libselinux.so.1
└── lib64
    └── ld-linux-x86-64.so.2

4 directories, 7 files

您的
deps
变量应该是一个数组,使用以下内容创建并重定向:


mapfile-t depsfurby@debian-haptic20:~# ./depcopy.sh
Added command:bash
'/bin/bash' -> '/var/lib/haproxy/bin/bash'
Added command:echo
'/bin/echo' -> '/var/lib/haproxy/bin/echo'
Added command:ls
'/bin/ls' -> '/var/lib/haproxy/bin/ls'
Added command:mysql
'/bin/mysql' -> '/var/lib/haproxy/bin/mysql'
deps for:bash
/lib/x86_64-linux-gnu/libtinfo.so.6
/lib/x86_64-linux-gnu/libdl.so.2
/lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux-x86-64.so.2
cp: failed to get attributes of '/lib/x86_64-linux-gnu/libtinfo.so.6'$'\n': No such file or directory
#!/bin/bash

if [ ${#} != 2 ]
then
    echo "usage $0 PATH_TO_BINARY target_folder"
    exit 1
fi

path_to_binary="$1"
target_folder="$2"

# if we cannot find the the binary we have to abort
if [ ! -f "${path_to_binary}" ]
then
    echo "The file '${path_to_binary}' was not found. Aborting!"
    exit 1
fi

# copy the binary itself
echo "---> copy binary itself"
cp --parents -v "${path_to_binary}" "${target_folder}"

# copy the library dependencies
echo "---> copy libraries"
ldd "${path_to_binary}" | awk -F'[> ]' '{print $(NF-1)}' | while read -r lib
do
    [ -f "$lib" ] && cp -v --parents "$lib" "${target_folder}"
done
$ mkdir /tmp/test
$ bash copydep.sh /bin/ls /tmp/test
---> copy binary itself
/bin -> /tmp/test/bin
'/bin/ls' -> '/tmp/test/bin/ls'
---> copy libraries
/lib -> /tmp/test/lib
/lib/x86_64-linux-gnu -> /tmp/test/lib/x86_64-linux-gnu
'/lib/x86_64-linux-gnu/libselinux.so.1' -> '/tmp/test/lib/x86_64-linux-gnu/libselinux.so.1'
'/lib/x86_64-linux-gnu/libc.so.6' -> '/tmp/test/lib/x86_64-linux-gnu/libc.so.6'
'/lib/x86_64-linux-gnu/libpcre.so.3' -> '/tmp/test/lib/x86_64-linux-gnu/libpcre.so.3'
'/lib/x86_64-linux-gnu/libdl.so.2' -> '/tmp/test/lib/x86_64-linux-gnu/libdl.so.2'
/lib64 -> /tmp/test/lib64
'/lib64/ld-linux-x86-64.so.2' -> '/tmp/test/lib64/ld-linux-x86-64.so.2'
'/lib/x86_64-linux-gnu/libpthread.so.0' -> '/tmp/test/lib/x86_64-linux-gnu/libpthread.so.0'

# Result:
$ tree /tmp/test/
/tmp/test/
├── bin
│   └── ls
├── lib
│   └── x86_64-linux-gnu
│       ├── libc.so.6
│       ├── libdl.so.2
│       ├── libpcre.so.3
│       ├── libpthread.so.0
│       └── libselinux.so.1
└── lib64
    └── ld-linux-x86-64.so.2

4 directories, 7 files