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