Các chức năng bash của Ubuntu..có lỗi không chính xác:


9

Cố gắng chạy một số hàm bash, nhưng vẫn gặp phải lỗi cú pháp: "(" không mong muốn. Tôi đã thử xóa dấu ngoặc, ngoặc đơn, v.v ... dường như không có gì hoạt động.

$ bash --version
GNU bash, version 4.3.46(1) release

#!/bin/bash
function hello () {
echo "Hello world"
}

Làm thế nào bạn đang chạy tập lệnh?
muru

Với sự cho phép đầy đủ. sh xin chào.sh
James A

1
xem ryanstutorials.net/bash-scripting-tutorial/bash-functaions.php
Rinzwind

Tôi đã đọc hướng dẫn của anh ấy đêm qua và theo dõi họ để xem tôi đã sai ở đâu ... nhưng tôi vẫn gặp một lỗi cú pháp rất khó hiểu. Không phải shebang ít nhất làm cho chức năng tương thích ngay cả khi Ubuntu đang chạy một trình bao khác?
James A

Vấn đề được giải quyết. Tôi đã sử dụng $ sh hello.sh ---> Tôi gặp lỗi. Tôi nên sử dụng ./hello.sh để chạy chính xác. Tôi đoán shebang đã được viết và trình bao dash mặc định được sử dụng?
James A

Câu trả lời:


18

Nếu bạn đang chạy tập lệnh với sh hello.sh, trình thông dịch sẽ không phải là tập lệnh được đề cập trong dòng shebang, nhưng /bin/shsẽ được sử dụng. Trong trường hợp Debian và Ubuntu theo mặc định, điều này sẽ là dash.

Vì vậy, để chạy tập lệnh của bạn một cách chính xác với a bash, hãy sử dụng một trong các cách sau.

/bin/bash hello.sh

hoặc là

chmod +x hello.sh
./hello.sh

Ngoài ra, bạn cũng có thể đặt bashlàm /bin/sh.

dpkg-reconfigure dash 

Cảm ơn bạn đã phản hồi. Không biết tại sao nó lại bị bỏ phiếu: /
James A

2

Đầu tiên:

Lỗi cú pháp là do (). Xóa () khỏi tệp như thế này:

#!/bin/bash
function hello {
echo "Hello world"
}

hoặc bạn chỉ có thể chạy lệnh sau để chỉnh sửa tệp cho bạn:

sed -i 's/() //g' hello.sh

Bây giờ bạn có thể chạy tệp với kết quả mong muốn.


Cách khác :

Bạn có thể thêm dòng 2, 3 và 4 vào ~/.bashrctệp của mình .

function hello () {
echo "Hello world"
}

Hãy nhớ rằng, không sử dụng sudođể chỉnh sửa ~/.bashrctập tin của bạn !

Sau khi bạn thêm các dòng vào tệp, hãy chạy lệnh sau để khởi động lại bash hoặc "nguồn" tệp .bashrc của bạn:

. ~/.bashrc

Bây giờ bạn có thể chạy comand hellovà "Hello world" sẽ in trong thiết bị đầu cuối.


Cũng thế:

Bạn có thể chỉnh sửa tệp để nói điều này thay vào đó:

#!/bin/bash
echo "Hello world"

và đặt tên cho tệp hellovà lưu tệp vào /usr/local/bin.

Sau khi thực hiện tất cả điều đó, làm cho tệp thực thi bằng cách chạy lệnh sau:

sudo chmod +x /usr/local/bin/hello

Bây giờ bạn có thể chạy comand hellovà "Hello world" sẽ in trong thiết bị đầu cuối.


Cuối cùng:

Tùy chọn thứ ba sẽ là thêm dòng sau vào ~/.bashrctệp của bạn :

alias hello='echo "Hello world"'

Sau đó, nguồn tệp .bashrc của bạn bằng lệnh sau:

. ~/.bashrc 

Cảm ơn bạn đã trả lời .... Tôi đã thử một vài và thấy câu trả lời đủ đơn giản. Thay vì sử dụng $ sh hello.sh ... ./hello.sh làm việc fine.It phải được các công việc được trên viết ^^
James A

Tại sao câu trả lời của Thomas đã bỏ phiếu nhưng? Có phải anh ấy không đúng?
James A

2

GNU Bash là shell được sử dụng theo mặc định trong các thiết bị đầu cuối trên Ubuntu. Tuy nhiên, khi tập lệnh được thực thi khi khởi động hệ thống thì dash được sử dụng, vì đó là dash là / bin / sh.

Không hoạt động ->

$ sh hello.sh

Sẽ làm việc ->

$./hello.sh

Vấn đề được giải quyết


1

Theo Script của bạn:

#!/bin/bash
function hello () {
    echo "Hello world"
}

#call this function as follow:
hello   # Syntax Correct
hello() # Syntax Error
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.