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

คำถามเฉพาะของ Bourne อีกครั้งของเชลล์ใน GNU เมื่อเทียบกับเชลล์ Bourne / POSIX อื่น ๆ สำหรับคำถามเกี่ยวกับเชลล์ Unix โดยทั่วไปให้ใช้ / เชลล์แท็กแทน

3
ในสคริปต์การกำหนดค่าเชลล์ฉันจะอธิบายถึงความแตกต่างระหว่าง coreutils บน BSD ได้อย่างไรเมื่อเปรียบเทียบกับ GNU
จนถึงเดือนนี้การกำหนดค่าเปลือกของฉันค่อนข้างเรียบง่าย (แค่ส่วนใหญ่.bashrcหรือ.bash_profileด้วยนามแฝงบางส่วน) แต่ฉันได้ทำการปรับโครงสร้างใหม่เพื่อที่ฉันจะได้รับพฤติกรรมที่แตกต่างกันขึ้นอยู่กับว่าฉันใช้ zsh และทุบตี พวกเขาแรกมาไฟล์เปลือก config ทั่วไปที่ควรทำงานอะไรก็ตามแล้วเชี่ยวชาญสำหรับเชลล์เฉพาะที่ใช้ (ฉัน symlink นี้) วันนี้ฉันรู้สึกประหลาดใจเมื่อlsหยุดทำงาน มันกลับกลายเป็นว่าในระหว่างการรีแฟค.bashrcเตอร์ alias ls='ls --color=always' ที่ทำลายสิ่งต่าง ๆlsในการทุบตีใน Terminal ใน OSX เมื่อฉันเห็นว่า BSD lsชอบ-Gสี แต่ GNU (หรืออะไรก็ตามที่อยู่บน Ubuntu) ชอบ--colorมันชัดเจนว่ามีตัวเลือกไม่กี่ตัวที่แตกต่างกัน คำถามของฉันคืออะไรวิธีที่ดีที่สุดในการพิจารณาความแตกต่างของตัวเลือกและระหว่างแกนกลาง BSD และ GNU คืออะไร? ฉันควรทดสอบตัวแปร env ในifบล็อกเพื่อดูว่ามีการใช้ระบบปฏิบัติการใดและใช้พฤติกรรมที่ถูกต้องหรือไม่ หรือมันเหมาะสมกว่าที่จะแยกไฟล์ปรับแต่งสำหรับแต่ละระบบปฏิบัติการ ในขณะที่คำตอบสำหรับคำถามเหล่านี้อาจเป็นอัตนัยดูเหมือนว่าบทสรุปของขอบเขตของความแตกต่างระหว่าง coreutils ของ BSD และ GNU และกลยุทธ์ในการแก้ไขปัญหาเหล่านี้เพื่อให้การกำหนดค่าทั่วไปที่ใช้งานได้บน nix ส่วนใหญ่จะมีวัตถุประสงค์อย่างเป็นธรรม
9 bash  bashrc  bsd  gnu 

4
วิธีการตรวจสอบสิทธิ์กลุ่มของไฟล์
ฉันต้องการตรวจสอบการอนุญาตกลุ่มของไฟล์จากสคริปต์ทุบตี โดยเฉพาะฉันต้องตรวจสอบว่าไฟล์มีบิตของกลุ่มที่สามารถเขียนได้หรือไม่ แค่นั้นแหละ. เรียบง่ายเหมือนที่ อย่างไรก็ตาม: ฉันยังต้องการสิ่งนี้เพื่อพกพา test -w <file จะไม่บอกฉันว่ามันเป็นกลุ่มที่เขียนได้ ผลลัพธ์ของls -ldดีสำหรับมนุษย์ แต่ไม่แน่ใจเกี่ยวกับสคริปต์ ในทางเทคนิคแล้วฉันสามารถแยกวิเคราะห์เอาต์พุตเช่นdrwxrwxr-xเพื่อแยกบิตกลุ่ม แต่ดูเหมือนจะเปราะ อินเทอร์เฟซสำหรับstatเข้ากันไม่ได้อย่างสมบูรณ์ระหว่าง OS X และระบบอื่น ๆ find <file> -perm ... ไม่สามารถเป็นคำตอบได้ใช่ไหม
9 bash  permissions  ls  stat 

1
ปิดใช้งานการเติมข้อความอัตโนมัติ Bash สำหรับคำสั่งเฉพาะเท่านั้น
เป็นไปได้หรือไม่ที่จะปิดการเติมข้อความอัตโนมัติของ Bash สำหรับคำสั่งเฉพาะเท่านั้น? กรณีใช้: ด้วยเหตุผลที่ชัดเจนฉันต้องการปิดใช้งานการเติมข้อความอัตโนมัติสำหรับrmคำสั่งเมื่อฉันรูท มันจะเป็นความเจ็บปวดที่น่ากลัวถ้าฉันปิดใช้งานการเติมข้อความอัตโนมัติโดยสิ้นเชิงดังนั้นฉันจึงต้องการลบออกrmเพียงอย่างเดียว สามารถทำได้ทั้งหมดโดยเฉพาะอย่างยิ่งโดยไม่แฮ็ค/etc/bash_completionและเพื่อน ๆ

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ใช้ค่าตัวแปรของฉันไม่ใช่ชื่อภายในสตริงนั้นได้อย่างไร?

3
เลือกชื่อไฟล์ Unicode ใน Bash
ตกลง; สมมติว่าฉันอยู่ใน Bash และฉันมีหลายไฟล์ในโฟลเดอร์ หลายคนมีชื่อfile☠☡☢☣.txtที่☠☡☢☣เริ่มต้นด้วยตัวอักษร unicode untypable บ้า ฉันจะอ้างถึงหนึ่งในนั้นได้อย่างไร กดแท็บเสร็จสมบูรณ์อัตโนมัติเท่านั้นfileแล้วต้องการให้คุณพิมพ์ตัวละครบ้า มีวิธีบอกทุบตี "เลือกอันที่ 3 ในรายการที่คุณเพิ่งให้ฉัน"?

4
วิธีการสั่งซื้อไฟล์ตามวันที่ในรายการเสร็จแท็บ
$ 7z l ~ / ดาวน์โหลด /Tab วิธีการทำให้รายการผลลัพธ์เรียงตามวันที่ไม่ใช่ตามชื่อ? ขณะนี้ฉันใช้สคริปต์พิเศษเพื่อแสดงรายการ N ไฟล์ล่าสุดในไดเรกทอรีที่กำหนด (และคัดลอกชื่อไฟล์ด้วยตนเองลงในบรรทัดคำสั่ง) แต่ต้องการทำให้ราบรื่นและสะดวกยิ่งขึ้น

1
การเปิดหลายหน้าต่างแยกด้วยหน้าจอ GNU ด้วยสคริปต์ทุบตีเดียว
ฉันต้องการสร้างสคริปต์ทุบตีเพื่อเปิดหน้าต่างหน้าจอโดยอัตโนมัติด้วย 4 เซสชันที่ใช้คำสั่งที่กำหนดไว้ล่วงหน้า ฉันต้องการที่จะเปิดฮอปเปอร์และ slurm ที่สองเฟรมบนสุด, squidview ในเฟรมใหญ่กลางและเทอร์มินัลว่างเปล่าที่เฟรมใหญ่ด้านล่าง เป็นไปได้ไหมที่จะตั้งค่าด้วยสคริปต์ทุบตีเดียว?


4
ใส่ข้อความในบัฟเฟอร์บรรทัดคำสั่ง bash
ฉันต้องการใส่ข้อความบางส่วนลงในบัฟเฟอร์บรรทัดคำสั่งของ bash โดยทางโปรแกรมเพื่ออ่านและแก้ไขและใช้เป็นคำสั่ง สิ่งที่ฉันรอคอยเป็นสิ่งที่คล้ายกับread -iแต่สำหรับคำสั่ง -i text หากกำลังใช้ readline เพื่ออ่านบรรทัดข้อความจะถูกวางในบัฟเฟอร์การแก้ไขก่อนที่จะเริ่มการแก้ไข แก้ไข : ด้วยโปรแกรมฉันหมายความว่าต้องการเขียนสิ่งนี้ในสคริปต์เปิดใช้งานสคริปต์และเตรียมบัฟเฟอร์คำสั่งหรือแก้ไขประวัติคำสั่ง (ตามที่มีคำถามที่แนะนำ)
9 bash  readline 

1
ทางลัด“ ลบคำ” ของเชลล์ลบอักขระจำนวนมากเกินไป
ภายใต้การทุบตีพฤติกรรมบางอย่างของAlt+ dทำให้ฉันบ้ามาหลายปีแล้วและฉันก็พบว่ามันอาจจะแก้ไขได้ด้วยการตั้งค่า ถ้าฉันอยู่ที่ terminal และออกคำสั่งดังนี้: ...$ cat >> ~/notesSuperLongFilename.txt แล้วถ้าฉันต้องการพูดออก: ...$ scp ~/notesSuperLongFilename.txt ฉันต้องการกลับมา "cat >> ~ / notesSuperLongFilename.txt" โดยใช้ Ctrl + p (บรรทัดก่อนหน้า) จากนั้นทำCtrl+ aและจากนั้นAlt+ dและAlt+ dอีกครั้งดังนั้นฉันจึงมี: ...$ ~/notesSuperLongFilename.txt แล้วฉันจะสามารถป้อน "scp" จากนั้นทำเครื่องหมายCtrl+ m(หรือกด Enter / Return) แต่มันไม่ได้ทำงานเพราะหลังจากที่ครั้งแรกAlt+ dฉันจะได้รับ: ...$ >> ~/notesSuperLongFilename.txt (ดีมาก) แต่หลังจากที่สองAlt+ dฉันจะได้รับ: ...$ .txt ดังนั้นด้วยเหตุผลบางอย่างAlt+ dลบ">> ~ …

2
SSH tunnel ผ่านเซิร์ฟเวอร์ middleman - วิธีเชื่อมต่อในขั้นตอนเดียว (ใช้คู่ที่สำคัญ)
คำถามของฉันเป็นวิธีการเปลี่ยนสองขั้นตอนที่มีอยู่เป็นขั้นตอนเดียว ฉันมีอุโมงค์ SSH ที่ใช้งานได้ตั้งค่าระหว่างคอมพิวเตอร์สองเครื่องโดยใช้เซิร์ฟเวอร์พ่อค้าคนกลางเช่นนี้: Kubuntu_laptop--->nat_fw--->Debian_Server<--nat_fw<--Kubuntu_desktop สิ่งที่ฉันทำในปัจจุบันคือ SSH จาก Kubuntu_laptop ไปยัง Debian_Server และจาก Debian_Server ถึง Kubuntu_desktop ฉันต้องการทำให้คำสั่ง SSH หนึ่งคำสั่งเผยแพร่บน Kubuntu_laptop ของฉันใน bash ซึ่งส่งผลให้ฉันเชื่อมต่อกับ Kubuntu_desktop (เชลล์ / bash) คำสั่งที่ฉันใช้ตอนนี้มีดังนี้ ขั้นตอนที่ 1: me@kubuntu_laptop:~$ ssh -i ~/.ssh/id_rsa admin@debian_server ขั้นตอนที่ 2: admin@debian_server:$ ssh -p 1234 -i /home/admin/.ssh/id_rsa admin@localhost จากนั้นฉันก็เชื่อมต่อกับ kubuntu_desktop ผ่าน SSH (จาก kubuntu_laptop) ต้องใช้คีย์ …

2
ขอรหัสผ่านแบบกราฟิกในสคริปต์ทุบตีและรักษาการตั้งค่าการหมดเวลา sudo เริ่มต้นไว้
sudo -A(SUDO_ASKPASS) ตัวเลือกที่เห็นได้ชัดทำให้เกิด sudo ที่จะสูญเสียการหมดเวลา (เช่น timestamp_timeout) การตั้งค่า ฉันต้องการใช้ตัวเลือก sudo -A แต่ฉันต้องการเก็บการหมดเวลาเริ่มต้น (เช่น 15 นาทีบน Ubuntu) ในสคริปต์ทุบตี ฉันต้องการขอรหัสผ่านของผู้ใช้อย่างปลอดภัยและในกล่องโต้ตอบ GUI แต่ฉันต้องการให้สคริปต์ของฉันแสดงเพียงครั้งเดียว (ไม่ใช่ 50+ ครั้ง) นอกจากนี้ฉันไม่ต้องการเรียกใช้สคริปต์ทั้งหมดของฉันในฐานะผู้ใช้รูทเพราะฉันคิดว่านั่นเป็นความคิดที่ไม่ดี นอกจากนี้ไฟล์ที่สร้างโดยสคริปต์ของฉันมีความเป็นเจ้าของผิดในกรณีนี้ ตัวเลือก sudo -A จะใช้งานได้สำหรับฉันหากยังคงมีการหมดเวลาเริ่มต้น จากคู่มือ sudo: ตัวเลือก: ‑A โดยปกติถ้า sudo ต้องการรหัสผ่านมันจะอ่านจากเทอร์มินัลของผู้ใช้ หากระบุตัวเลือก askA (askpass) โปรแกรมตัวช่วย (อาจเป็นแบบกราฟิก) จะถูกดำเนินการเพื่ออ่านรหัสผ่านของผู้ใช้และส่งรหัสผ่านไปยังเอาต์พุตมาตรฐาน หากตัวแปรสภาพแวดล้อม SUDO_ASKPASS ถูกตั้งค่ามันจะระบุพา ธ ไปยังโปรแกรมตัวช่วย มิฉะนั้นถ้า /etc/sudo.conf มีบรรทัดที่ระบุโปรแกรม …

2
วิธีเพิ่มผู้ใช้ unix / linux ในสคริปต์ทุบตี
นี่คือสคริปต์ทุบตีทดสอบของฉัน ฉันไม่สามารถทำงานได้ ฉันเห็นข้อผิดพลาดสองข้อ: Use of uninitialized value $answer in chop at /usr/sbin/adduser line 589. Use of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590. นี่คือสคริปต์ของฉัน: #!/bin/bash sudo adduser myuser << ENDX password password First Last Y ENDX exit 0 นี่คือผลลัพธ์: me@mycomputer$ ./adduser.sh Adding user `myuser' ... Adding …
9 bash  useradd 

3
การแก้ไขไฟล์ปรับแต่งด้วยสคริปต์ทุบตี
ฉันพยายามเขียนสคริปต์ทุบตีง่ายๆที่ฉันจะใช้ในการติดตั้งแอปพลิเคชันและอัปเดตเป็นไฟล์ปรับแต่ง ฉันมีเวลายากที่จะได้รับมันเป็นไฟล์ปรับเปลี่ยน # DBHost=localhost DBName=test # DBPassword= ข้อเสนอแนะใด ๆ ที่ฉันจะได้รับการแก้ไขดังกล่าวข้างต้น? DBHost=localhost DBName=database DBPassword=password

2
ฉันจะหยุดทุบตีจากการตรวจสอบไวยากรณ์ที่มาไฟล์ได้อย่างไร
ฉันมีรหัสต่อไปนี้ในไฟล์ที่มาจากทั้ง zsh และ bash if test $SHELLNAME = zsh ; then lss() { l -l ${1:-.}/*(s,S,t); } laf() { l ${1:-.}/.*(.); } lad() { l -d ${1:-.}/.*(/); } lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); } fi SHELLNAMEคือzshถ้าเปลือกเป็น zsh และbashถ้าเปลือกเป็นทุบตี แต่ละฟังก์ชั่นด้านบนมีรหัสที่ใช้งานได้กับ zsh แต่ไม่ใช่การทุบตี เมื่อฉันส่งไฟล์นี้มาฉันได้รับข้อผิดพลาดดังต่อไปนี้ bash: <filename>: line 67: syntax error near unexpected …
9 bash  zsh 

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