2011-07-13 48 views
1

我需要執行一個腳本來在指定位置提取tar。即使路徑正確,shell腳本cd也會失敗

我不喜歡簡單的東西:

cp test.tar /var/www/html 
cd /var/www/html 
tar xvf test.tar 

如果我執行命令手工一切正常。如果我將它們保存在.sh中,然後使用#bash script.sh,則會出現以下錯誤:「不是目錄cd:/ var/www/html」。任何ideea爲什麼?

Ty爲你的時間。

說明:我試過了虛擬機上的腳本版本(CentOS 5.5),腳本工作正常,問題發生在我想要使用它的實際機器上(我使用了相同的操作系統磁盤映像,虛擬機......這對我來說真的很奇怪)。

補充:我也嘗試調用類似service mysqld start的東西...這也失敗了,說一個dir不存在(如果我用手工運行,它仍然有效)。

+0

如果'html'不存在,複製命令會將您的test.tar重命名爲'html'。確保它實際上是一個目錄,而不是文件的副本。 – Cfreak

+0

它存在...是一個目錄 – zozo

+0

您是否以不同的用戶身份運行腳本?嘗試在腳本的頂部添加'whoami'和'ls -la/var/www',並將它們提供的輸出與直接從命令行運行時得到的輸出進行比較。 – Costa

回答

2

我解決了這個問題 - 這很有趣)。

我在使用centos os的windows上運行的虛擬機上創建腳本,在linux中輸入「\ r \ n」爲「\ n」。

腳本在vm上工作,因爲輸入代碼是正確的,而在第二臺計算機上,使用本機linux時,它是不正確的。我在linux上創建了完全相同的腳本,一切都恢復正常;)。

注意... mkdir部分工作,因爲我用另一個簡化的腳本寫在Linux上。

1

它看起來像你的cp可能是應對test.jar到文件 html下的www目錄。確保html存在並且在嘗試cp之前是一個目錄。

mkdir -p /var/www/html 
cp test.tar /var/www/html 
cd /var/www/html 
tar xvf test.tar 
+0

它存在並且是一個目錄... – zozo

+0

cd給出錯誤消息的唯一方法是讓目標不成爲目錄 –

+0

看來腳本創建了一個名爲html的文件? (甚至認爲HTML存在),並試圖複製它...這解決了一半的問題(更新與下半年) – zozo

1

在相關說明中,我發現「〜」字符在bash中似乎不起作用,所以如果使用該字符,請嘗試將其替換爲完整路徑。

+0

謝謝。這就是我遇到的情況。而一種可能的解決方案是僅僅用現場代替$ HOME(如果你不能改變數據源): cd $ {DirectoryString /#\〜/ $ HOME} –

相關問題