2016-11-22 861 views
0

我希望更多的专家会发现一些明显的语法错误,或者能够帮助我解决错误。tar:can not stat:shell脚本运行时没有这样的文件或目录

脚本的基本思想: 我有一个shell脚本,将读取LIST.TXT,寻找我需要的,然后复制到另一个目录中的文件或文件夹。

工作环境: 的Ubuntu 12.04

问题/错误: 我修改之前,我有一个演示脚本复制所有工作正常的文件。然而,当我修改剧本,它给了我这个错误: 焦油XXXXX.ko不能静:没有这样的文件或目录 焦油与失败状态退出由于先前的错误

我修改的东西是列表的路径。

如下图所示

#!/bin/sh 
cd /home/leo/Desktop/Script_testing 
INSTALL_PATH=./output/.install/ 
NAND2_PATH=./output/nand1-2_2 
if [ ! -d $NAND2_PATH ]; then 
mkdir $NAND2_PATH 
fi 
if [ ! -f /home/leo/Desktop/Script_testing/list2.txt ]; then 
echo "error : list_2 not found : " 
exit 
fi 
cd $INSTALL_PATH 
tar cf - `cat /home/leo/Desktop/Script_testing/list2.txt` | (cd ../../../${NAND2_PATH} ; tar xf -) 

这里

shell脚本代码是我list2.txt:

./app_drvier/led/led.ko 
./Desktop/testing/beeper.h 
./Desktop/testing/beeper.c 
./bin/usb_plug.sh 
./etc/hostname 

当我运行./mycp.sh目录“nand1-2_2:将创建在输出下,但是,我提到的错误显示为 tar : XXXXX cannot stat : No such file or directory tar : Exiting with failure status due to previous errors

希望有人能帮助我。谢谢你这么多

更新 我跑sh -x mycp.sh后的结果如下

+ cd /home/dragon/Desktop/Script_testing 
+ INSTALL_PATH=./output/.install/ 
+ NAND2_PATH=./output/nand1-2_2 
+ [ ! -d ./output/nand1-2_2 ] 
+ [ ! -f /home/dragon/Desktop/Script_testing/list2.txt ] 
+ cd ./output/.install/ 
nand1-2_2.sh: 12: cd: can't cd to ./output/.install/ 
+ cd ../../.././output/nand1-2_2 
nand1-2_2.sh: 13: cd: can't cd to ../../.././output/nand1-2_2 
+ tar xf - 
+ cat /home/dragon/Desktop/Script_testing/list2.txt 
+ tar cf - ./app_drvier/ontech_led/onetech.led.ko 
tar: ./app_drvier/ontech_led/onetech.led.ko: Cannot stat: No such file or directory 
tar: Exiting with failure status due to previous errors 
+1

基本调试是使用'-x' bash的选项。运行'sh -x mycp.sh'并注意输出。 – Jdamian

+0

@Jdamian我刚刚试过这个,我在那里发布了打印文件。请看看你有没有时间 –

+0

你能看不到那里显示的错误吗?它们是有意义的 - 'INSTALL_PATH'不存在或者你没有访问(权限问题)。因此,'cd'命令无法工作。 – Jdamian

回答

1

该错误消息说,该文件./app_drvier/ontech_led/onetech.led.ko不存在。这并不令人意外,因为两个cd命令执行得较早,失败。

根本原因似乎是,目录./output/.install或者不存在,或者您没有chdir权限。

我建议你总是评估cd命令的退出状态。如果cd失败,继续运行脚本没有任何意义。

比如,你可以写:

cd $INSTALL_PATH || exit 1 
+0

或'set -e' for the lazy。 – ceving

相关问题