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

3
tar cvf หรือ tar -cvf?
ฉันได้เรียนรู้การใช้ tar โดยไม่มี '-' สำหรับตัวเลือกเช่นtar cvfz dir.tar.gz Directory/แต่เมื่อเร็ว ๆ นี้ฉันมีtar -czvfไวยากรณ์แตกต่างกันเล็กน้อย(ฉันคิดว่า 'f' ต้องเป็นตัวเลือกสุดท้ายในกรณีนี้) ทั้งทำงานบน linux และ Mac OS มีไวยากรณ์ที่แนะนำหรือไม่ถ้าไม่มี '-' ซึ่งพกพาสะดวกกว่าในรสชาติ unix หรือไม่?

7
tail -f แต่มีหมายเลขบรรทัด
ฉันพยายามที่จะดูว่ามีกี่ครั้งที่foo barปรากฏขึ้น/var/log/foo.logภายในระยะเวลาโดยพลการบนเซิร์ฟเวอร์ระยะไกล แต่ไม่มีอะไรที่ฉันได้ลองมาแล้ว ฉันมีสคริปต์ตัวจับเวลาแล้วที่ฉันใช้เพื่อติดตามว่ามันได้รับมานานแค่ไหนตั้งแต่ฉันเริ่ม tailing /var/log/foo.logและตอนนี้ฉันก็อยากจะบอกว่ากี่ครั้งที่foo barปรากฏในเอาท์พุทเทลด์ ฉันค้นหา google แต่ฉันไม่พบสิ่งใดที่เกี่ยวข้องภายใน 10 หน้าแรกของผลลัพธ์ นี่คือสิ่งที่ฉันได้ลองด้วยผลลัพธ์ที่น่าผิดหวัง: ## works on local machine, but doesn't work as expected on remote tail -f /var/log/foo.log | grep foo\ bar | sed '=' ## works on local, but not remote tail -f /var/log/foo.log | grep foo\ bar | …

6
การสร้างรหัสผ่านแบบสุ่ม ทำไมพกพานี้ไม่ได้?
ฉันต้องการสร้างรหัสผ่านแบบสุ่มและฉันชอบ: </dev/urandom tr -dc [:print:] | head -c 64 บนแล็ปท็อปของฉันซึ่งใช้งาน Ubuntu สิ่งนี้จะสร้างตัวอักษรที่พิมพ์ได้ตามที่ตั้งใจ แต่เมื่อฉันเข้าสู่เซิร์ฟเวอร์ของโรงเรียนซึ่งรัน Red Hat Enterprise Linux และเรียกใช้ที่นั่นฉันจะได้ผลลัพธ์เช่น3!ri�b�GrӴ��1�H�<�oM����&�nMC[�Pb�|L%MP�����9��fL2q���IFmsd|l�Kที่จะไม่ทำเลย เกิดอะไรขึ้นที่นี่

2
ความสามารถในการพกพาของลิงค์ไฟล์อธิบาย
ฉันสงสัยอยู่เสมอ แต่ไม่เคยใช้เวลาในการค้นหาดังนั้นฉันจะทำตอนนี้ - การใช้งานแบบพกพาแสดงได้อย่างไรจากที่นี่/proc/$$/fd/$Nหรือ /dev/fd/$Nฉันเข้าใจการรับประกัน POSIX /dev/null, /dev/tty, and /dev/console (แม้ว่าฉันจะพบว่าในวันอื่น ๆ หลังจากอ่านความคิดเห็นในคำตอบนี้ )แต่แล้วคนอื่น ๆ เหล่านี้ล่ะ? เท่าที่ฉันสามารถบอกได้ว่าพวกเขาเป็นเรื่องธรรมดา แต่ในระบบใดที่ฉันไม่สามารถคาดหวังว่าจะพบพวกเขา ทำไมจะไม่ล่ะ? มีแนวโน้มที่จะพบหนึ่งมากกว่าอื่น ๆ ? พวกเขาจะแสดงเหมือนแอตทริบิวต์เสมอหรือไม่ ฉันมักจะใช้อุปกรณ์เหล่านี้อย่างกว้างขวางในทุกรูปแบบและฉันอยากจะรู้ว่าถ้ามีโอกาสฉันจะลองสั้น ๆ ควรเข้าใจคำถามข้างต้นเป็นเพียงสิ่งที่ฉันคิดว่าฉันอยากรู้ แต่เนื่องจากฉันต้องถามตั้งแต่แรกฉันอาจไม่ทราบดีที่สุดในเรื่องนี้และพวกเขาไม่ควรพิจารณาข้อกำหนดที่เข้มงวดสำหรับ คำตอบ. กรุณาช่วยฉันด้วยถ้าทำได้โปรดเถอะ

3
ใช้ ^ เป็นตัวบ่งชี้เชลล์
ฉันเขียนสคริปต์เล็ก ๆ วันนี้ซึ่งมี grep -q ^local0 /etc/syslog.conf ในระหว่างการตรวจสอบผู้ร่วมงานแนะนำ^local0ให้เสนอราคาเพราะ^หมายถึง "ท่อ" ในเชลล์เป้าหมาย ฉันได้พยายามติดตามข้อมูลอ้างอิงที่กล่าวถึงสิ่งนี้ ไม่พบสิ่งใดบนอินเทอร์เน็ตที่แนะนำว่านี่เป็นปัญหา อย่างไรก็ตามปรากฎว่าการใช้งานbsh(ซึ่งอ้างว่าเป็นเชลล์เป้าหมาย) บน AIX 7 มีลักษณะการทำงานนี้: > bsh $ ls ^ wc 23 23 183 $ ls | wc 23 23 183 ไม่มีการใช้งาน "บอร์นเชลล์" อื่นใดที่ฉันพยายามทำในลักษณะนี้ (นั่น^คือไม่ถือว่าเป็นเชลล์เมตาอักขระเลย) ฉันลองใช้shCentOS (ซึ่งทุบตีจริงๆ) และshFreeBSD (ซึ่งไม่ใช่ทุบตี) ฉันไม่มีระบบอื่น ๆ ให้ลอง พฤติกรรมนี้คาดหวังหรือไม่? เชลล์ตัวไหนที่คิดว่า^เป็นตัวชี้ตำแหน่งท่อ?

4
วิธีการที่สอดคล้องกับ checkbashisms เพื่อกำหนดเชลล์ปัจจุบัน
ในของ.profileฉันฉันใช้รหัสต่อไปนี้เพื่อให้แน่ใจว่านามแฝงที่เกี่ยวข้องกับ Bash และฟังก์ชั่นมีที่มาเฉพาะถ้าเปลือกเข้าสู่ระบบเป็น Bashจริง: # If the current (login) shell is Bash, then if [ "${BASH_VERSION:-}" ]; then # source ~/.bashrc if it exists. if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi fi ขณะนี้ฉันกำลังวางไฟล์เชลล์สคริปต์และฟังก์ชั่นการทำงานภายใต้การควบคุมเวอร์ชัน ฉันยังเพิ่งเริ่มต้นขั้นตอนการลบ Bashisms สบายจากสคริปต์เปลือกที่ไม่ได้รับประโยชน์จากคุณลักษณะทุบตีเฉพาะเช่นแทนที่ด้วยfunction funcname()funcname() สำหรับที่เก็บไฟล์เชลล์ของฉันฉันได้กำหนดค่าฮุคล่วงหน้าที่เรียกใช้checkbashismsยูทิลิตี้จากแพ็คเกจ devscriptsของ Debian ในแต่ละshไฟล์ในที่เก็บเพื่อให้แน่ใจว่าฉันไม่ได้แนะนำไวยากรณ์เฉพาะของ Bash โดยไม่ได้ตั้งใจ อย่างไรก็ตามสิ่งนี้ทำให้เกิดข้อผิดพลาดสำหรับ.profile: possible bashism in .profile …

2
การเขียนสคริปต์แบบพกพามีความสำคัญเมื่อใด
รหัสส่วนใหญ่ฉันเขียนอยู่ใน PHP ฉันเพิ่งเริ่มเรียนรู้การเขียนสคริปต์เชลล์ ทรัพยากรและแบบฝึกหัดส่วนใหญ่ที่ฉันเจอนั้นเฉพาะเจาะจงกับ Bash บางคนเตือนเกี่ยวกับ bashisms และบางคนไม่ทำ ฉันอ่านมากที่นี่และ Stack Overflow เมื่อใดก็ตามที่คำตอบใช้bashismsบางคนย่อมแสดงความคิดเห็นว่า: คุณไม่ควรใช้ <insert bashism ที่นี่> มันไม่ได้พกพา bashนี้เกิดขึ้นแม้ในขณะที่คำถามที่ได้รับการติดแท็กด้วย สำหรับฉันแล้วมันเหมือนกับบอกโปรแกรมเมอร์ PHP ว่าพวกเขาไม่ควรใช้รหัสที่ใหม่ใน PHP 5 เพราะมันไม่สามารถใช้กับ PHP 4 หรือบอกคนที่พวกเขาไม่ควรเขียนอะไรบางอย่างสำหรับ Mac เพราะมันไม่สามารถใช้ บน Windows เมื่อผมเขียนใน PHP, ฉันได้รับความต้องการขั้นต่ำและที่ผมเขียนไปข้างหน้ารหัสใช้ได้กับระบบปฏิบัติการ ฉันไม่ต้องกังวลกับการทำให้ย้อนกลับ -เข้ากันได้ ถ้าฉันใช้#!/bin/bashเป็นสาวเธอทำไมฉันไม่ควรใช้วิธีการทุบตี? ฉันเริ่มที่จะได้รับความประทับใจที่บางคนชอบทุบตี bashisms (ปุนตั้งใจ) เพียงเพื่อประโยชน์ของมัน ผู้คนมักจะใช้bashและใช้shellแทนกันได้ - อาจเป็นเพราะการทุบตีเป็นเชลล์เริ่มต้นในหลาย ๆ ระบบ ดังนั้นฉันสามารถเข้าใจการเพิ่มความคิดเห็นเพื่อเตือนว่ารหัสใช้ bashisms แต่ฉันไม่เข้าใจความหมายที่ผิดที่จะใช้พวกเขา เห็นได้ชัดว่าถ้าฉันเขียนสคริปต์อย่างเคร่งครัดเพื่อใช้ส่วนตัวฉันสามารถเขียนเป็นภาษาใดก็ได้ที่ฉันต้องการ …

2
/ dev / {udp, tcp} เป็นมาตรฐานหรือมีอยู่ทุกที่หรือไม่?
ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้เกี่ยวกับ/dev/udpและ/dev/tcpหลอกอุปกรณ์ที่นี่ พวกมันจำเพาะเจาะจงกับ GNU / Linux ดิสทริบิวชันหรือฉันสามารถหามันในระบบยูนิกซ์อื่น ๆ ได้หรือไม่? พวกเขามีมาตรฐานในบางวิธี? จนถึงตอนนี้ฉันสามารถใช้พวกมันสำเร็จบน OS X, Arch Linux และ CentOS
17 devices  tcp  udp  portability 

8
ไบนารีเป็นแบบพกพาข้ามสถาปัตยกรรมซีพียูที่แตกต่างกันหรือไม่?
เป้าหมายของฉันคือการพัฒนาลินุกซ์ฝังตัว ฉันมีประสบการณ์เกี่ยวกับระบบฝังตัวโลหะเปลือยโดยใช้ ARM ฉันมีคำถามทั่วไปเกี่ยวกับการพัฒนาสำหรับซีพียูที่แตกต่างกัน คำถามของฉันมีดังนี้: หากฉันมีแอปพลิเคชันที่คอมไพล์ให้ทำงานบน ' เป้าหมาย x86, linux OS เวอร์ชัน xyz ' ฉันจะสามารถรันไบนารีที่คอมไพล์เดียวกันนี้ในระบบอื่น ' เป้าหมาย ARM, linux OS เวอร์ชัน xyz ' ได้หรือไม่? หากข้างต้นไม่เป็นความจริงวิธีเดียวคือการรับซอร์สโค้ดของแอปพลิเคชันเพื่อสร้าง / คอมไพล์ซ้ำโดยใช้ toolchain ที่เกี่ยวข้อง 'ตัวอย่างเช่น arm-linux-gnueabi' ในทำนองเดียวกันถ้าฉันมีโมดูลเคอร์เนลที่สามารถโหลดได้ (ไดรเวอร์อุปกรณ์) ที่ทำงานบน ' x86 เป้าหมาย, linux OS เวอร์ชัน xyz ' ฉันสามารถโหลด / ใช้. ko เดียวกันที่คอมไพล์ได้ในระบบ ' เป้าหมาย ARM, …

2
เอาต์พุตของ stat บน OSX
ฉันต้องการใช้statคำสั่งเพื่อรับข้อมูลเกี่ยวกับไฟล์ ฉันทำอย่างนี้: Josephs-MacBook-Pro:Desktop Joseph$ echo 'hello' > info.txt Josephs-MacBook-Pro:Desktop Joseph$ stat info.txt 16777220 21195549 -rw-r--r-- 1 Joseph staff 0 6 "Dec 21 20:45:31 2014" "Dec 21 20:45:30 2014" "Dec 21 20:45:30 2014" "Dec 21 20:45:30 2014" 4096 8 0 info.txt บรรทัดที่ 3 และ 4 เป็นผลลัพธ์ที่ฉันได้รับ สิ่งนี้จะเกิดขึ้นทุกครั้งที่ฉันใช้statคำสั่ง ในขณะที่ทุกคนบนอินเทอร์เน็ตได้รับสิ่งที่ชอบ: File: `index.htm' Size: …
15 osx  stat  portability 

2
ข้อไหนคือพกพาที่สุดของ sed, awk, perl และ sh?
ใครสามารถใส่เครื่องมือเหล่านี้ตามลำดับของการพกพา? ซึ่งเหล่านี้เป็นบางอย่างที่จะพบในได้มากที่สุดที่น้อยที่สุด * ระบบระวัง? เป็นของพวกเขา 100% แน่ใจว่าจะนำเสนอ? ฉันเดาว่าลำดับต่อไปนี้คือ: awk sed ดวลจุดโทษ Perl ในขณะที่ฉันจินตนาการว่ามีระบบที่ไม่เริ่มต้นเชลล์ bourne บางเชลล์จะปรากฏเป็นค่าเริ่มต้นที่จะอยู่ที่/bin/sh? ไม่น่าจะเป็นไปได้ว่ามันไม่ใช่เปลือกหอยชนิด Bourne ทั้งสองawkและsedมีหน้าอธิบายพวกเขาในสเปค POSIX ดังนั้นสันนิษฐานว่าพวกเขาจะมีอยู่เสมอ เป็นอย่างนั้นเหรอ? ฉันมั่นใจได้หรือไม่ว่าทั้งสองจะถูกติดตั้งบน * nix ใด ๆ ? รวมถึงระบบฝังตัว?

3
Python ที่ใช้ Unix ใดติดตั้งเป็นส่วนหนึ่งของการติดตั้งเริ่มต้น
ไม่มีใครทราบถึงภาพรวมที่จะบันทึกว่ามีการแจกแจง UNIX Python (ล่าสุด) โดยค่าเริ่มต้นคือส่วนหนึ่งของการติดตั้งเริ่มต้นหรือไม่ PS: คำตอบจาก StackOverflow ก่อนย้ายคำถามที่นี่: ไม่ทราบสำหรับ Unix OS ทั้งหมด แต่สำหรับ Linux คุณสามารถตรวจสอบ distrowatch.org ได้ตลอดเวลา แต่นี่ไม่ใช่เว็บไซต์ที่เหมาะสมสำหรับการโพสต์คำถามประเภทนี้: โปรดย้ายไปที่ unix.stackexchange.com - vstrien 2 ชั่วโมงที่ผ่านมา ฉันไม่สามารถนึกถึงการกระจายใด ๆ ที่ไม่ได้ติดตั้งตามค่าเริ่มต้น เครื่องมือระบบพื้นฐานมากมายเขียนด้วยภาษาไพ ธ อน - Daniel Roseman 1 ชั่วโมงที่แล้ว ไม่ได้ติดตั้งตามค่าเริ่มต้นใน LFS ... - Oz123 1 ชั่วโมงที่ผ่านมา

2
วิธีการพกพามากที่สุดในการเปิดตัวเครื่องจำลองเทอร์มินัลคืออะไร?
ว่าฉันต้องเขียนสคริปต์ที่จะเปิดตัว terminal และรันคำสั่งและฉันต้องการที่จะทำงานในระบบต่างๆ ฉันจะทำอย่างปลอดภัยและพกพาได้อย่างไร มีการxtermติดตั้งเสมอ? ฉันคิดว่า * nix ที่มี GUI ต้องมีเทอร์มินัลอีมูเลเตอร์บ้าง ฉันจะไปถึงได้อย่างไร ระบบเดเบียนมี x-terminal-emulatorแต่ที่เห็นได้ชัดว่าไม่ได้ทำงานใน Red Hat นับประสา non-Linux * nixes

2
เชลล์อื่นที่ไม่ใช่ Bash และ Zsh สนับสนุนการอ้างอิง ANSI-C หรือไม่ เช่น $ 'string'
ฉันมีเชลล์สคริปต์ที่ใช้สิ่งต่อไปนี้เพื่อพิมพ์เครื่องหมายถูกสีเขียวในผลลัพธ์: col_green="\e[32;01m" col_reset="\e[39;49;00m" echo -e "Done ${col_green}✓${col_reset}" หลังจากที่ได้อ่านเกี่ยวกับการทุบตีของANSI-C Quotingผมรู้ว่าผมสามารถใช้มันเมื่อตั้งค่าตัวแปรสีของฉันและเอา-eธงจากฉันก้อง col_green=$'\e[32;01m' col_reset=$'\e[39;49;00m' echo "Done ${col_green}✓${col_reset}" ดูเหมือนว่าน่าสนใจเพราะมันหมายถึงข้อความที่พิมพ์อย่างถูกต้องไม่ว่ามันจะถูกส่งผ่านไปยังเสียงสะท้อนในตัวของ Bash หรือการใช้งานภายนอก/bin/echo(ฉันใช้บน macOS) แต่สิ่งนี้ทำให้สคริปต์พกพาน้อยลงหรือไม่ ฉันรู้ว่า Bash และ Zsh สนับสนุนรูปแบบการอ้างอิงนี้ แต่ฉันไม่แน่ใจเกี่ยวกับคนอื่น

7
ฉันจะรับรุ่น ksh อย่างปลอดภัยได้อย่างไร
ฉันจะรับรุ่น ksh อย่างปลอดภัยจากภายในสคริปต์ ksh ได้อย่างไร ฉันได้เห็นวิธีแก้ไขปัญหาต่อไปนี้ : ksh --version echo ${.sh.version} echo $KSH_VERSION และเมื่อได้รับสถานการณ์ที่เหมาะสมแต่ละงานเหล่านี้ถูกต้อง อย่างไรก็ตามฉันสนใจกรณีที่ไม่สมบูรณ์ โดยเฉพาะมีหลายเครื่องที่ฉันทำงานด้วยที่มีรุ่นเก่ากว่า ksh ที่สำหรับวัตถุประสงค์ของฉันขาดฟังก์ชั่นอย่างรุนแรง อย่างไรก็ตามเหตุผลที่ฉันต้องการตรวจสอบรุ่น (โดยทางโปรแกรม) คือดูว่ารุ่น ksh เป็นหนึ่งในรุ่นที่มีความสามารถน้อยกว่าหรือไม่ และถ้าเป็นเช่นนั้นฉันต้องการรันสาขาด้วยรหัสที่ยอดเยี่ยมน้อยลง อย่างไรก็ตามในเครื่องที่มีปัญหาความไม่สมบูรณ์ของเชลล์จะขยายไปสู่การตรวจสอบเวอร์ชัน ... ถ้าฉันลองksh --versionมันจะพิมพ์ออกมาและเปิดตัวอย่างใหม่ของksh! หากฉันลองecho ${.sh.version}ให้kshถือว่านี่เป็นข้อผิดพลาดทางไวยากรณ์ที่ไม่สามารถทิ้ง2> /dev/nullได้ $ echo ${.sh.version} 2> /dev/null ksh: ${.sh.version}: bad substitution แน่นอนecho $KSH_VERSIONว่าใช้งานได้ดี - ฉันหมายความว่ามันจะไม่ผิดพลาด - แม้ว่าเครื่องเหล่านี้จะว่างเปล่า นอกจากนี้ผมเห็นที่ไหนสักแห่งที่มีการตั้งค่าโดยเฉพาะKSH_VERSIONpdksh คำถาม: ฉันจะตรวจสอบเวอร์ชั่นของkshโปรแกรมอย่างปลอดภัยได้อย่างไร kshสำหรับวัตถุประสงค์ของฉันที่นี่ฉันไม่สนใจสิ่งที่หมายเลขรุ่นที่เกิดขึ้นจริงเป็นเพียงแค่ไม่ว่าจะเป็นรุ่นเก่า …

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