2012-06-05 47 views
11

如何我指的是當前目錄中的shell腳本參考當前目錄中的shell腳本

所以我有這個腳本調用在同一個目錄

#! /bin/sh 

#Call the other script 
./foo.sh 

# do something ... 

另一個腳本對於此我./foo.sh: No such file or directory

所以我把它改爲:

#! /bin/sh 

#Call the other script 
foo.sh 

# do something ... 

但是這會調用foo腳本,默認情況下,該腳本位於PATH中。這不是我想要的。

所以問題是,在shell腳本中做'./`的語法是什麼?

+1

'。/'表示當前工作目錄_,而不是存儲當前正在執行的腳本文件_的目錄。我不確定任何機制來獲取包含當前正在執行的腳本的目錄。但是如果你的第一個腳本在'PATH'中,那麼第二個腳本也是如此...... – sarnold

回答

18

如果兩個腳本都在同一個目錄中,並且出現了./foo.sh: No such file or directory錯誤,那麼最可能的原因是您從不同目錄運行第一個腳本,而不是它們所在的目錄。將以下內容放入第一個腳本腳本,以便調用foo.sh作品無論在那裏你調用從第一個劇本:

my_dir=`dirname $0` 
#Call the other script 
$my_dir/foo.sh 
+0

很棒!謝謝 –

+0

如何處理目錄名稱中的空格?它會引發錯誤 – roosevelt

+0

該目錄的完整路徑爲'$ PWD/$ my_dir' –

0

如果路徑中有包含腳本的目錄的空間接受的解決方案不起作用。

如果你可以使用bash,這個工作對我來說:

#!/bin/bash 
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
"${SCRIPTDIR}/foo.sh" 
4

下面的代碼與空間效果很好,並不需要bash的工作:如果你想

#!/bin/sh 

SCRIPTDIR="$(dirname "$0")" 

#Call the other script 
"$SCRIPTDIR/foo.sh" 

而且使用絕對路徑,你可以這樣做:

SCRIPTDIR=`cd "$(dirname "$0")" && pwd`