คำถามติดแท็ก shell

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

5
วิธีเริ่มโปรแกรมในพื้นหลัง
โปรแกรมBoblightไม่ทำงานในพื้นหลัง ไม่มีความแตกต่างที่เห็นได้ชัดเจนระหว่างการดำเนินการ sudo boblightd และ sudo boblightd& ฉันจะแก้ปัญหานี้ได้อย่างไรว่าคอนโซลจะไม่ปิดกั้นอินพุตเพิ่มเติม pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven) (InitLog) start of log /root/.boblight/boblightd.log (PrintFlags) starting boblightd (CConfig::LoadConfigFromFile) opening /etc/boblight.conf (CConfig::CheckConfig) checking config lines (CConfig::CheckConfig) config lines valid (CConfig::BuildConfig) building config (CConfig::BuildConfig) built config successfully …

1
วิธี echo ตัวแปรโดยใช้ cat เป็นไฟล์ได้อย่างไร
ฉันมีสคริปต์ง่าย ๆ เช่นนี้: #!/bin/bash BOO=bla-bla-bla cat > ./Makefile <<'EOF' Hello INCLUDES := -I/data/opt/include/ -Ideps/ -I$BOO/include EOF แต่มันจะส่งสัญญาณออกเป็นไฟล์: Hello INCLUDES := -I/data/opt/include/ -Ideps/ -I$BOO/include จะทำให้การcatใช้ค่าตัวแปรของฉันไม่ใช่ชื่อภายในสตริงนั้นได้อย่างไร?



2
ฉันจะหลีกเลี่ยงชื่อไดเรกทอรีย่อยด้วยเครื่องหมายและในนั้นได้อย่างไร
ใช้ kornshell และพยายามสำรวจแผนผังไดเรกทอรี ต้องการ cd ไปยังไดเรกทอรีย่อยชื่อดังนี้ -3ab_&_-3dc.img คำถามของฉันคือฉันต้องหลบหนีจากเครื่องหมายและในชื่อนี้ได้อย่างไร ฉันลองชุดคำพูดและแบ็กสแลชที่แตกต่างกันโดยไม่ประสบความสำเร็จ

3
case + วิธีใช้งานเท่ากันหรือน้อยกว่าหรือน้อยกว่า
เป้าหมายของฉันคือการตรวจสอบช่วงของตัวเลขด้วย (เฉพาะกับcase+ esac) และพิมพ์ช่วง ตัวอย่างเช่น: หากตัวเลขอยู่ระหว่าง 0 ถึง 80 ให้พิมพ์ >=0<=80 หากตัวเลขอยู่ระหว่าง 81 ถึง 100 ให้พิมพ์ >=81<=100 เป็นต้น ปัญหาเกี่ยวกับสคริปต์ของฉันด้านล่างพิมพ์เฉพาะใน>=0<=90กรณีที่หมายเลขระหว่าง 0 ถึง 9 วิธีการแก้ไขสคริปต์ของฉันเพื่อที่จะพิมพ์ผลลัพธ์ที่ถูกต้องตามช่วงหมายเลข? #!/bin/ksh read number case $number in [0-80]) echo ">=0<=80";; [81-100]) echo ">=81<=100";; [101-120]) echo ">=101<=120";; [121-300]) echo ">=121<=300";; esac

3
จะเปรียบเทียบไฟล์ xml สองไฟล์ที่มีข้อมูลเหมือนกันในบรรทัดที่ต่างกันได้อย่างไร
ฉันมีสองไฟล์มีข้อมูลเหมือนกัน แต่อยู่ในบรรทัดที่ต่างกัน ไฟล์ 1: <Identities> <Identity> <Id>048206031415072010Comcast.USR8JR</Id> <UID>ccp_test_79</UID> <DisplayName>JOSH CCP</DisplayName> <FirstName>JOSH</FirstName> <LastName>CCP</LastName> <Role>P</Role> <LoginStatus>C</LoginStatus> </Identity> <Identity> <Id>089612381523032011Comcast.USR1JR</Id> <UID>94701_account1</UID> <DisplayName>account1</DisplayName> <FirstName>account1</FirstName> <LastName>94701</LastName> <Role>S</Role> <LoginStatus>C</LoginStatus> </Identity> </Identities> ไฟล์ 2: <Identities> <Identity> <Id>089612381523032011Comcast.USR1JR</Id> <UID>94701_account1</UID> <DisplayName>account1</DisplayName> <FirstName>account1</FirstName> <LastName>94701</LastName> <Role>S</Role> <LoginStatus>C</LoginStatus> </Identity> <Identity> <Id>048206031415072010Comcast.USR8JR</Id> <UID>ccp_test_79</UID> <DisplayName>JOSH CCP</DisplayName> <FirstName>JOSH</FirstName> <LastName>CCP</LastName> <Role>P</Role> <LoginStatus>C</LoginStatus> </Identity> </Identities> ถ้าฉันใช้diff file1 …

4
OpenSSH - แม็พนามแฝงใน ~ / .ssh / config กับที่อยู่ IP ในบรรทัดคำสั่ง
เป็นไปได้หรือไม่ที่จะสอบถาม ~ / .ssh / config ในบรรทัดคำสั่ง? สมมติว่าฉันต้องการดึงข้อมูลที่อยู่ IP ที่ชื่อแทนนั้นชี้ไปในโปรแกรมอื่นเป็นไปได้หรือไม่

2
วิธีการทำกรณีที่มีข้อโต้แย้งซีดีไม่สำคัญ?
บางครั้งในขณะที่เข้าถึงไดเรกทอรีต่างๆมันเกิดขึ้นส่วนใหญ่เวลาที่ฉันจำชื่อหรืออย่างน้อยส่วนหนึ่งของชื่อของไดเรกทอรีภายใต้ระบบ Linux ของเรา แต่บางไดเรกทอรีมีชื่อเริ่มต้นด้วยตัวอักษรตัวแรกหรือหนึ่งในตัวละครที่อยู่ตรงกลางของชื่อตัวพิมพ์ใหญ่ ใครสามารถแนะนำฉันจะทำให้ข้อโต้แย้งดังต่อไปนี้cdกรณีคำสั่ง INSENSITIVE เช่นว่าถ้าฉันทำcd BackupDirectoryหรือcd backupdirectoryมันสามารถป้อนชื่อไดเรกทอรี BackupDirectory แน่นอนว่าฉันไม่ต้องการควงสิ่งต่าง ๆ สำหรับผู้ใช้รายอื่นดังนั้นหากเป็นไปได้ข้างต้นเป็นไปได้หรือไม่ว่าการเปลี่ยนแปลงนั้นสามารถนำไปใช้กับเซสชันที่ฉันกำลังใช้และไม่ส่งผลกระทบต่อผู้ใช้คนอื่น ๆ ? ตกลงฉันพยายาม set completion-ignore-caseแต่ก็ไม่ได้ผล มันช่วยได้ถ้าฉันพิมพ์cd bและTabหรือEsc Escเติมชื่อไดเรกทอรีโดยไม่สนใจขนาดตัวพิมพ์ แต่สิ่งที่ฉันต้องการคือถ้าฉันทำcd backupdirectoryมันก็แค่เพิกเฉยต่อคดีและเข้าไปBackupDirectoryในตัวของมันเอง

2
ทดสอบ POSIX และ -a
ฉันตรวจสอบสคริปต์ของฉันด้วยcheckbashismsและฉันได้รับคำเตือนดังต่อไปนี้: possible bashism in check_ssl_cert line 821 (test -a/-o): if [ -n "${ALTNAMES}" -a -n "${COMMON_NAME}" ] ; then ในข้อกำหนด 4.62.4 ของ POSIX ที่ฉันพบ primary -a primary ดำเนินการไบนารีและของผลลัพธ์หลักและหลัก ตัวดำเนินการ -a มีความสำคัญเหนือกว่าตัวดำเนินการ -o ทำไม-aและ-oไม่ถือว่าเป็นอุปกรณ์พกพา

6
วิธีดูคำสั่งที่ดำเนินการในเชลล์อื่น?
มีวิธีดูว่าคำสั่งใดที่ถูกดำเนินการในเชลล์อื่นในขณะที่พวกเขากำลังดำเนินการ? เปลือกทั้งสองเป็นทุบตีและฉันมีสิทธิ์เข้าถึงรูทหากเรื่องนั้นสำคัญ ฉันไม่สามารถติดตั้งซอฟต์แวร์พิเศษใด ๆ ได้และฉันไม่ต้องการให้เชลล์ตัวอื่นต้องทำอะไรเป็นพิเศษเช่นหน้าจอทำงาน สถานการณ์: ฉันลงชื่อเข้าใช้เครื่อง Linux จากระยะไกลและเป็นผู้ร่วมงานด้วย ฉันต้องการดูคำสั่งที่เธอใช้ในเชลล์ของเธอ ฉันรู้ว่าฉันสามารถใช้การรวมกันของwatchและpsเพื่อดูคำสั่งใด ๆ ที่ใช้เวลานานกว่าหนึ่งวินาทีในการทำงาน แต่ฉันไม่เชื่อว่าจะช่วยให้มีคำสั่งสั้น ๆ

2
ทำไม --text =“ $ @” ผ่านคำแรกเท่านั้น
เมื่อฉันเรียกใช้สคริปต์ต่อไปนี้ด้วยข้อโต้แย้งบางอย่างเช่นarg1 arg2 arg3: #!/bin/bash zenity --entry --text="$@" Zenity สร้างกล่องโต้ตอบรายการด้วยข้อความนี้: "arg1" ในขณะที่ฉันคาดหวัง "arg1 arg2 arg3" ถ้าฉันใช้ตัวแปรเช่นสคริปต์ต่อไปนี้มันจะแสดงข้อโต้แย้งทั้งหมดสำหรับข้อความรายการ #!/bin/bash text="$@" zenity --entry --text="$text" ความแตกต่างระหว่างสคริปต์เหล่านี้คืออะไร? ทำไมคนแรกแทนที่$@ด้วยอาร์กิวเมนต์แรกเท่านั้น?
9 bash  shell  quoting 

1
การเปลี่ยนเส้นทางและช่องว่างเอาท์พุท
ฉันหวาดระแวงเกี่ยวกับเรื่องนี้ แต่หวังว่ามันจะเป็นคำถามง่าย ๆ : มีความแตกต่างระหว่าง cat file1 | egrep -oP "[Mm]y string" > /home/user/file.txt และ cat file1|egrep -oP "[Mm]y string">/home/user/file.txt เช่นจะเป็นสิ่งสำคัญหรือไม่หากฉันมีช่องว่างที่เติมช่องว่าง (|) และเปลี่ยนเส้นทาง (>) ฉันหวาดระแวงจริงๆที่มีช่องว่างที่นั่นช่องว่างนั้นจะจบลงในไฟล์เอาต์พุตเมื่อฉันไม่ต้องการมัน ทุกคนสามารถอธิบายได้หรือไม่ (การใช้ Ubuntu 12 / bash หากมีความสำคัญ)

2
ทำไม Bash ไม่พบคำสั่งแม้ว่าจะระบุ $ PATH อย่างถูกต้องหรือไม่
ฉันกำลังระบุพา ธ ไปยังคำสั่งของฉันในไฟล์/ etc / profile : export PATH=$PATH:/usr/app/cpn/bin คำสั่งของฉันอยู่ใน: $ which ydisplay /usr/app/cpn/bin/ydisplay ดังนั้นเมื่อฉันแสดงเอาต์พุต "echo $ PATH" ดูเหมือนว่า: $ echo $PATH ...:/usr/app/cpn/bin และทุกอย่างก็โอเค แต่เมื่อฉันพยายามที่จะเปิดคำสั่งของฉันผ่าน SSH ฉันได้รับข้อผิดพลาด: $ ssh 127.0.0.1 ydisplay $ bash: ydisplay: command not found แต่เส้นทางของฉันยังคงอยู่: $ ssh 127.0.0.1 echo $PATH ...:/usr/app/cpn/bin โปรดอธิบายฉันว่าเหตุใด Bash ไม่สามารถหา ydisplay ในระหว่างเซสชัน SSH …
9 linux  bash  shell  ssh  path 

1
dd: กำลังเขียน '/ dev / null': ไม่มีพื้นที่เหลือบนอุปกรณ์
ฉันกำลังอ่านไฟล์ 550MB เป็น / dev / null และฉันได้รับ dd: writing '/dev/null': No space left on device ฉันรู้สึกประหลาดใจ. ฉันคิดว่า / dev / null เป็นหลุมดำที่คุณสามารถส่งได้มากเท่าที่คุณต้องการ (เพราะมันเป็น fs เสมือนจริง) ใช่ดิสก์ของฉันเกือบเต็มเมื่อฉันได้รับข้อผิดพลาดนี้ ฉันจะทำอะไรได้นอกจากการลบเนื้อหาออกจากดิสก์ ls -l /dev/null -rw-r--r-- 1 root root 0 July 7 21:58 /dev/null แทน crw-rw-rw- 1 root root 1, 3 July 7 02:58 …

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