ฟังก์ชั่นทุบตีของ Ubuntu .. ข้อผิดพลาดทางไวยากรณ์:“ (” หรือ“}” ไม่คาดคิด


9

กำลังพยายามเรียกใช้ฟังก์ชันทุบตี แต่พบข้อผิดพลาดทางไวยากรณ์: "(" ไม่คาดคิดฉันได้ลองลบวงเล็บวงเล็บ ฯลฯ ฯลฯ ... ดูเหมือนว่าจะไม่มีอะไรทำงาน

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

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

คุณใช้งานสคริปต์อย่างไร
muru

ด้วยสิทธิ์อย่างเต็มที่ sh hello.sh
James A

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

ฉันอ่านบทเรียนของเขาเมื่อคืนและติดตามพวกเขาเพื่อดูว่าฉันไปผิดทางไหน ... แต่ฉันยังคงได้รับข้อผิดพลาดทางไวยากรณ์ซึ่งสับสนมาก shebang อย่างน้อยไม่ควรทำให้ฟังก์ชั่นเข้ากันได้แม้ว่า Ubuntu จะใช้เชลล์ที่แตกต่างกันหรือไม่?
James A

แก้ไขปัญหา. ฉันใช้ $ sh hello.sh ---> ฉันได้รับข้อผิดพลาด ฉันควรจะใช้. /hello.sh เพื่อให้ทำงานได้อย่างถูกต้องฉันคาดเดาว่า Shebang ได้รับการเขียนทับและเชลล์ประเริ่มต้นใช้งานหรือไม่
James A

คำตอบ:


18

หากคุณใช้งานสคริปต์sh hello.shเชลล์การตีความจะไม่เป็นที่กล่าวถึงในบรรทัด Shebang แต่/bin/shจะถูกใช้ ในกรณีของ Debian และ Ubuntu dashโดยค่าเริ่มต้นนี้จะเป็น

ดังนั้นในการรันสคริปต์ของคุณอย่างถูกต้องด้วย a bashให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

/bin/bash hello.sh

หรือ

chmod +x hello.sh
./hello.sh

หรือคุณยังสามารถตั้งค่าเป็นbash/bin/sh

dpkg-reconfigure dash 

ขอบคุณสำหรับการตอบกลับไม่มีความคิดว่าเหตุใดจึงลงคะแนน: /
James A

2

ครั้งแรก:

ข้อผิดพลาดทางไวยากรณ์เป็นเพราะ () ลบ () จากไฟล์เช่นนี้:

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

หรือคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อแก้ไขไฟล์สำหรับคุณ:

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

ตอนนี้คุณควรจะสามารถเรียกใช้ไฟล์ด้วยผลลัพธ์ที่ต้องการ


อีกทางหนึ่ง :

คุณสามารถเพิ่มบรรทัด 2, 3 และ 4 ใน~/.bashrcไฟล์ของคุณ

function hello () {
echo "Hello world"
}

จำไว้ว่าอย่าใช้sudoเพื่อแก้ไข~/.bashrcไฟล์ของคุณ!

หลังจากคุณเพิ่มบรรทัดลงในไฟล์แล้วให้รันคำสั่งต่อไปนี้เพื่อรีสตาร์ท bash หรือ "source" ไฟล์. bashrc ของคุณ:

. ~/.bashrc

ตอนนี้คุณควรจะสามารถเรียกใช้ comand helloและ "Hello world" ควรพิมพ์ในเครื่อง


นอกจากนี้:

คุณสามารถแก้ไขไฟล์เพื่อพูดสิ่งนี้แทน:

#!/bin/bash
echo "Hello world"

และตั้งชื่อไฟล์helloและบันทึกไฟล์/usr/local/binไว้

หลังจากทำทั้งหมดให้สร้างไฟล์ที่เรียกใช้งานได้โดยใช้คำสั่งต่อไปนี้:

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

ตอนนี้คุณควรจะสามารถเรียกใช้ comand helloและ "Hello world" ควรพิมพ์ในเครื่อง


สุดท้าย:

ตัวเลือกที่สามคือการเพิ่มบรรทัดต่อไปนี้ใน~/.bashrcไฟล์ของคุณ:

alias hello='echo "Hello world"'

จากนั้นให้จัดหาไฟล์. bashrc ของคุณโดยใช้คำสั่งต่อไปนี้:

. ~/.bashrc 

ขอบคุณสำหรับคำตอบ .... ฉันได้ลองไปสองสามครั้งแล้วและพบว่าคำตอบนั้นง่ายพอ แทนที่จะใช้ $ sh hello.sh ... ./hello.sh ทำงานได้ดีต้องเป็น shebang ที่เขียนทับ ^^
James A

ทำไมคำตอบของโธมัสจึงลงมติ แต่? เขาไม่ถูกต้องเหรอ?
James A

2

GNU Bash เป็นเชลล์ที่ใช้โดยค่าเริ่มต้นในเทอร์มินัลบน Ubuntu อย่างไรก็ตามเมื่อสคริปต์ถูกเรียกใช้งานในการบูตระบบระบบจะใช้เครื่องหมายขีดกลางเนื่องจากเป็นเส้นประที่มี / bin / sh

จะไม่ทำงาน ->

$ sh hello.sh

จะทำงาน ->

$./hello.sh

แก้ไขปัญหา


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.