2016-11-22 212 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

相關問題