我正在尝试制作一个Bash脚本,用户可以在其中复制文件,看看是否成功完成.但是每次复制完成,无论是否正确,都会显示第二个输出"未完成复制".不知道怎么解决这个问题?
if [ `cp -i $files $destination` ];then echo "Copy successful." else echo "Copy was not done" fi
PSkocik.. 9
你想要的是什么
if cp -i "$file" "$destination"; then #...
不要忘记引号.
你的版本:
if [ `cp -i $files $destination` ];then #..
将始终执行else
分支.
shell中的if语句接受命令.如果该命令成功(返回0
,将被分配$?
),则条件成功.
如果你这样做if [ ... ]; then
,那么它是一样的
if test ... ; then
,因为[ ]
对于语法糖测试命令/内置.
在你的情况,你传递的结果,标准输出*的的cp
操作作为参数传递给test
该标准输出一个的cp
操作将是空的(cp
一般只有输出错误和那些去STDERR).一个test
具有空参数列表调用是一个错误.该错误导致非零退出状态,因此您始终获得else
分支.
*$()
进程替换或反引号进程替换会破坏它们运行的命令的标准输出
你想要的是什么
if cp -i "$file" "$destination"; then #...
不要忘记引号.
你的版本:
if [ `cp -i $files $destination` ];then #..
将始终执行else
分支.
shell中的if语句接受命令.如果该命令成功(返回0
,将被分配$?
),则条件成功.
如果你这样做if [ ... ]; then
,那么它是一样的
if test ... ; then
,因为[ ]
对于语法糖测试命令/内置.
在你的情况,你传递的结果,标准输出*的的cp
操作作为参数传递给test
该标准输出一个的cp
操作将是空的(cp
一般只有输出错误和那些去STDERR).一个test
具有空参数列表调用是一个错误.该错误导致非零退出状态,因此您始终获得else
分支.
*$()
进程替换或反引号进程替换会破坏它们运行的命令的标准输出
使用后退标记,您将测试cp命令的输出,而不是其状态.您也不需要测试命令(方括号).
只需使用:
if cp ... ; then ...