【发布时间】:2020-12-23 10:57:10
【问题描述】:
我正在尝试编写一个脚本来通过 samba 服务器下载文件夹/文件,然后将其移动到所需的目录。我做了这个(附脚本) 但是命令没有正确解释...
#!/bin/bash
# script client side to download files throught samba server
# Packages requirements: smbclient
# assuming locals ip are like: 192.168.1.XX
# assuming samba share folder's name is: "jean"
# @author: Jean
# @param: last numbers of local ip @, i.e: xxx.xxx.x.01 ; -->01<--
# variable
SRC="192.168.1." # local ip @ where samba is enable
NAME="jean" # samba's group name
PASS="jean%jeann" # samba's username and password
# *** test
CMD1="'tarmode'"
CMD2="'recurse'"
CMD3="'prompt'"
CMD4="'ls'"
CMD5="'tarmode ; ls'"
# ***
CMDS="tarmode ; recurse ; prompt ; ls"
# fct usage de la commande
usage() {
echo
echo "Usage:"
echo "./client-samba.sh <end of IP @> <folder's name> <destination>"
echo
echo " i.e: ./client-samba 12 toDownloadFromSamba ~/Downloads/"
echo
exit 1
}
# fct de test si le répertoire de destination existe
destExists() {
if [[ ! -d ${DEST} ]]; then
echo "ERROR : le répertoire de destination n'existe pas"
usage
fi
}
copyFiles() {
# ( echo "${CMD1}" ; "${CMD2}" ; "${CMD3}" ; "${CMD4}" ) | smbclient //${SRC}${IP}/${NAME} -U ${PASS} -c
# ( echo "${CMD1}" & ls ) | smbclient //${SRC}${IP}/${NAME} -U ${PASS} -c
DL="smbclient //${SRC}${IP}/${NAME} -U ${PASS} -c ${CMD5}"
#DL="smbclient //${SRC}${IP}/${NAME} -U ${PASS}"
echo ${DL}
$(${DL})
#mget ${SMBFOLDER}
exit 1
# mv ${HOME}/${SMBFOLDER} ${DEST}
}
# on teste le nombre d'arguments
if [[ $# -ne 3 ]];then
usage
else
IP=$1
SMBFOLDER=$2
DEST=$3
destExists
copyFiles
fi
这是我得到的错误:
smbclient //192.168.1.34/jean -U jean%jeann -c 'tarmode ; ls'
./client-samba.sh: ligne 51: 'tarmode: : commande introuvable
我指定当我手动执行命令时,效果很好……
你能帮帮我吗?
ps:我知道我可以通过命令 smbget 做到这一点,但是(我想先解决我的问题)
【问题讨论】:
-
我建议不要将命令放入变量中。
-
不管怎样都不行...
-
将命令(或命令的参数列表)放入变量中不起作用;见BashFAQ #50: I'm trying to put a command in a variable, but the complex cases always fail!