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

Korn shell (ksh) เป็นเชลล์ที่มีคุณสมบัติการเขียนสคริปต์ขั้นสูงซึ่งมักพบได้ใน unices เชิงพาณิชย์และระบบ BSD บางระบบ แต่ไม่ค่อยได้ใช้บน Linux

4
วิธีที่จะทำให้การค้นหาสตริงด้วยคำสั่ง grep เป็นคำสั่ง if?
ฉันต้องการค้นหาหลายสายในสองไฟล์ หากพบหนึ่งสตริงในไฟล์ทั้งสองให้สร้างบางอย่าง หากพบหนึ่งสตริงในไฟล์เดียวให้สร้างอีกอย่าง คำสั่งของฉันคือต่อไป: ####This is for the affirmative sentence in both files if grep -qw "$users" "$file1" && grep -qw "$users" "$file2"; then ####This is for the affirmative sentence in only one file, and negative for the other one if grep -qw "$users" "$file1" ! grep -qw "$users" "$file2"; …

5
พรอมต์สีใน KornShell
ตามโพสต์ StackOverflow นี้เป็นไปได้ที่จะมีพรอมต์สีใน KornShell ฉันไม่สามารถหาวิธีการทำสิ่งนี้ได้ ฉันสามารถใช้สี: echo -e "\033[34mLinux\033[00m" ให้เอาต์พุต "Linux" สีน้ำเงินเช่นเดียวกับ: printf "\033[34mLinux\033[00m" อย่างไรก็ตามเมื่อฉันรวมรหัสการยกเว้นลงในPS1ตัวแปรที่พร้อมท์ของฉันพวกเขาจะไม่ถูกยกเว้น ฉันต้องทำอย่างไรจึงจะได้รับพรอมต์สี นอกเหนือจากการเป็นเครื่องดูดฝุ่นสำหรับ eyecandy ฉันพบว่าพรอมต์สีมีประโยชน์เมื่อแยกวิเคราะห์การมองเห็น
11 colors  prompt  ksh 

4
ข้าม 3 ไบต์แรกของไฟล์
ฉันใช้ AIX 6.1 ksh shell ฉันต้องการใช้สายการบินหนึ่งในการทำสิ่งนี้: cat A_FILE | skip-first-3-bytes-of-the-file ฉันต้องการข้าม 3 ไบต์แรกของบรรทัดแรก มีวิธีทำเช่นนี้หรือไม่?

4
ค้นหาไดเรกทอรีที่ไม่มีไดเรกทอรีย่อย
ฉันกำลังเขียนสคริปต์คือ ksh จำเป็นต้องค้นหาชื่อไดเรกทอรีทั้งหมดภายใต้ไดเรกทอรีปัจจุบันซึ่งมีเฉพาะไฟล์เท่านั้นไม่ใช่ไดเรกทอรีย่อย ฉันรู้ว่าฉันสามารถใช้ls -alRและแยกวิเคราะห์เอาต์พุตแบบซ้ำ ๆ สำหรับตัวอักษรตัวแรกในฟิลด์แรก ( dสำหรับไดเรกทอรี) ฉันคิดว่าawkเป็นวิธีที่ดีที่สุดในการแยกวิเคราะห์และค้นหา ตัวอย่างเช่นls -alเอาต์พุตแบบง่ายในไดเร็กทอรีปัจจุบัน: drwxr-xr-x 22 af staff 748 18 Mar 22:21 . drwxr-xr-x 5 root admin 170 17 Mar 18:03 .. -rw------- 1 af staff 3 17 Mar 16:37 .CFUserTextEncoding drwxr-xr-x 5 af staff 170 17 Mar 17:12 Public drwxr-xr-x 9 …
10 shell  find  directory  ls  ksh 

3
ปุ่ม Delete ไม่ทำงานในบรรทัดคำสั่ง
** หมายเหตุ: ฉันถามคำถามเดียวกันนี้กับ SuperUser แต่ไม่ได้รับคำตอบใด ๆ ตอนนี้ฉันรู้แล้วว่านี่เป็นฟอรัมที่เหมาะสมกว่าสำหรับคำถามนี้โดยเฉพาะ * ในเชลล์ ksh ปุ่ม Delete ไม่ทำงานอย่างเหมาะสมในบรรทัดคำสั่ง ฉันได้รับ ~ เมื่อฉันกด Delete ฉันจะทำอย่างไร: ผูกฟังก์ชันของ"ลบอักขระที่เคอร์เซอร์" กับปุ่มลบคีย์บอร์ดหรือไม่ (การควบคุม -D ทำงานเหมือนที่ฉันคาดหวังว่าปุ่มลบจะทำงานได้และความพยายามในการใช้นามแฝงนั้นไม่ประสบความสำเร็จและไร้เดียงสา) ผูกฟังก์ชันการทำงานของ " ย้ายไปที่บรรทัดแรก"กับปุ่มแป้นพิมพ์หน้าแรกหรือไม่ (การควบคุม A ทำได้ในตอนนี้ แต่ฉันต้องการให้ Home ทำ) ผูกฟังก์ชันการทำงานของ " ย้ายไปยังจุดสิ้นสุดของบรรทัด " ไปยังปุ่มแป้นพิมพ์สิ้นสุดหรือไม่ (การควบคุม E ทำสิ่งนี้ในตอนนี้ แต่ฉันต้องการให้จบ) อัปเดตสุดท้าย (?) ฉันสะดุดสิ่งที่ใช้งานได้ แต่ฉันไม่เข้าใจว่าทำไม งานนี้: bind '^[[3'=prefix-2 bind '^[[3~'=delete-char-forward …

1
ksh93 เร็วแค่ไหน?
โดยทั่วไปแล้วฉันมักจะมองหาการsedประมวลผลข้อความ - โดยเฉพาะอย่างยิ่งสำหรับไฟล์ขนาดใหญ่ - และมักจะหลีกเลี่ยงการทำสิ่งต่าง ๆ เหล่านั้นในเชลล์เอง แต่ฉันคิดว่ามันอาจเปลี่ยนไป ฉันแหย่ไปรอบ ๆman kshและฉันสังเกตเห็นสิ่งนี้: <#pattern Seeks forward to the beginning of the next line containing pattern. <##pattern The same as <# except that the por‐ tion of the file that is skipped is copied to standard output. ฉันสงสัยว่ามันมีประโยชน์ในโลกแห่งความเป็นจริงฉันจึงลองทำดู ฉันทำ: seq -s'foo bar ' …

3
ส่งต่อฟังก์ชันและตัวแปรไปยัง sudo su - <user> << EOF
ฉันได้ประกาศฟังก์ชั่นและตัวแปรใน bash / ksh และฉันต้องการส่งต่อไปยังsudo su - {user} &lt;&lt; EOF: #!/bin/bash log_f() { echo "LOG line: $@" } extVAR="yourName" sudo su - &lt;user&gt; &lt;&lt; EOF intVAR=$(date) log_f ${intVAR} ${extVAR} EOF

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

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