2010-04-01 31 views

Trả lời

9

Nếu bạn muốn đảm bảo các sam kết quả e (đường dẫn đầy đủ và tên script) thử một cái gì đó như thế này:

... 
rootdir=`/bin/dirname $0`  # may be relative path 
rootdir=`cd $rootdir && pwd` # ensure absolute path 
zero=$rootdir/`/bin/basename $0` 
echo $zero 
... 

Sau đó, bạn có thể gọi nó như foo.sh, ./foo.sh, một số/thấp/dir/foo.sh và vẫn nhận được cùng một kết quả bất kể nó được gọi như thế nào.

+0

Cảm ơn! Làm việc rất tốt. –

2
#!/bin/tcsh 
echo "I am $0." 
7

Trong vỏ c, hãy thử như thế này:

set rootdir = `dirname $0` 
set abs_rootdir = `cd $rootdir && pwd` 
echo $abs_rootdir 
+2

Cảm ơn bạn đã lưu bản dịch cho tôi. Thật kỳ lạ khi người hỏi dường như muốn csh, và cú pháp sh được chấp nhận. – stevesliva

+0

Thật không may khi tôi làm điều này trong kịch bản #!/Bin/csh của tôi, và chạy nó với một đường dẫn tương đối (./myscript.csh), nó luôn luôn trả về thư mục chính của tôi. Không quan trọng tôi đặt kịch bản này ở đâu. 'dirname $ 0' là '.' và 'pwd' trả về $ HOME – mdiehl13

+0

@ mdiehl13 của tôi Vấn đề bạn mô tả không xảy ra với tôi. Bạn vẫn thấy cùng một vấn đề? Bạn có thể cần kiểm tra tệp .cshrc của mình và xem liệu có bất kỳ cấu hình đặc biệt nào liên quan đến cài đặt đường dẫn thư mục hay không. – euccas

0

Nếu bạn muốn một đường dẫn tuyệt đối thì đây sẽ giúp bạn ra ngoài:

#!/bin/tcsh -f 
set called=($_) 

if ("$called" != "") then ### called by source 
    echo "branch 1" 
    set script_fn=`readlink -f $called[2]` 
else       ### called by direct excution of the script 
    echo "branch 2" 
    set script_fn=`readlink -f $0` 
endif 

echo "A:$0" 
echo "B:$called" 
set script_dir=`dirname $script_fn` 

echo "script file name=$script_fn" 
echo "script dir=$script_dir" 

Nguồn: http://tipsarea.com/2013/04/11/how-to-get-the-script-path-name-in-cshtcsh/

Các vấn đề liên quan