Làm thế nào để thực thi tập lệnh nằm trong cùng thư mục với tập lệnh hiện tại?


11

Tại sao shell script rất khó phát triển? Trong NodeJS tôi chỉ có thể làm:

require('./script')

và nó sẽ luôn yêu cầu tập lệnh liên quan đến tập lệnh hiện tại. Nhưng nếu tôi thử trong shell / bash:

./script.sh

nó sẽ tìm tập lệnh liên quan đến cwd( pwd). Có vẻ dấu chấm có nghĩa là cwd( pwd) chứ không phải thư mục chứa tập lệnh hiện tại như tôi mong đợi.

line 8: ./script.sh: No such file or directory

Làm thế nào để thực thi tập lệnh liên quan đến thư mục nơi tập lệnh thực thi hiện tại được đặt?

Tôi đã thử

/bin/bash script.sh

nhưng nhận được lỗi:

/bin/bash: script.sh: No such file or directory

Sau đó đã thử

script.sh

Có lỗi này

line 8: script.sh: command not found

Chỉ có giải pháp sau hoạt động tốt, nhưng vấn đề là nó không thể đọc được:

$("$(dirname "$(realpath "$0")")/script.sh")

Câu trả lời:


11

Một biến thể khác để có được tập lệnh dir:

DIR="$(cd "$(dirname "$0")" && pwd)"

sau đó bạn có thể gọi script với

$DIR/script.sh

6

Thật không may đó là con đường để đi.

Một cách khác (mà tôi thích) là cd vào thư mục hiện tại ở đầu tập lệnh của bạn như thế này:

cd $(dirname $0)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.