你能帮我解决一个非常奇怪的情况吗?
我有 Ubuntu 18.04 并且正在运行一些 bash 脚本,我的脚本如下所示。
#!/bin/bash
FOLDER="$1"
FILE="$2"
BASENAME=$(/bin/basename "$FOLDER/$FILE" | /bin/sed 's/\.[^.]*$//')
HOST="FTPSERVER"
USER="username"
PASSWORD="pass"
###########################
cd /home/vod/output/
#start=$(date +%s)
ftp -n -v >> /var/log/ftptransfer_hrmxf.log 2>&1 $HOST <<END_SCRIPT
binary
user $USER $PASSWORD
prompt
cd media
put $FILE
quit
END_SCRIPT
############### FIXME!!!! #######################
echo "$BASENAME" >> /var/log/videos_done
问题在于 ECHO 命令不输出基本名称,而是输出空白字符。
请帮助我理解我做错了什么?
太感谢了。
答案1
首先,basename
位于 ,/usr/bin/basename
而不是您在脚本中编码的位置。因此,由于命令basename
失败(并且您没有在代码中检查这一点),变量的值$BASENAME
很可能是NULL
。
我通常在编写脚本时在脚本开头放置一个显式的 PATH。例如:
PATH=/usr/bin:/bin:/usr/local/bin
export PATH
目前还不清楚该sed
命令的目的是什么。
还可以尝试使用该命令bash -uvx scriptname
来检查命令之前和命令执行时变量的扩展和设置。