Hành vi kỳ lạ trong $ (dirname `readlink -f $ 0`)


11

Khi tôi chạy như sau với tư cách là một người dùng bình thường, mọi thứ đều ổn:

$(dirname `readlink -f $0`)

nhưng sau khi tôi chuyển sang root, đã xảy ra lỗi sau:

readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

Có ý kiến ​​gì không? Tôi đã thử trên Fedora 16 và Amazon EC2, cả hai đều chạy bash shell.

chỉnh sửa để minh họa.

xin lỗi rằng tôi không minh họa thêm vấn đề ở đây. đây là kịch bản:

sử dụng tài khoản người dùng bình thường:

$ pwd 
/home/myuser 
$ export MY_DIR=$(dirname `readlink -f $0`) 
$ echo MY_DIR 
/home/myuser

sử dụng root:

# pwd
/root
# export ROOT_DIR=$(dirname `readlink -f $0`)
readlink: invalid option -- 'b'
Try `readlink --help' for more information.
dirname: missing operand
Try `dirname --help' for more information.

# export ROOT_DIR=echo $(dirname `readlink -f -- $0`)
# echo $ROOT_DIR
/root

Câu trả lời:


16

Đây phải là lỗi tương tự như trong vỏ đăng nhập của người dùng, bởi vì trong vỏ đăng nhập 0, tham số shell, mở rộng thành tên của quy trình hiện tại, đưa ra -bash, dấu trừ cho biết vỏ đăng nhập. Bây giờ bạn thấy -blỗi đến từ đâu.

Thay vào đó hãy thử

echo "$( dirname "$(readlink -f -- "$0")" )"

Không những gì --( "trừ trừ" hoặc "dash dash") chỉ? Nevermind - Tôi đã tìm thấy câu trả lời ở đây: /unix//q/11376
osullic

3

Nếu bạn thực sự muốn tên thư mục của shell script đang được chạy:

script_dir="$(dirname -- "$(readlink -f -- "$0")")"

Vâng, nó hơi lộn xộn, nhưng nó an toàn.

Nếu bạn muốn trình bao hiện tại, bạn có thể thử đề xuất sử dụng của @ MichaelMrozek $SHELL.

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.