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

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

7
เหตุใดฉันจึงต้องทำซีดีออกจากไดเรกทอรีที่ถูกลบ
บนเซิร์ฟเวอร์ของฉันฉันมีโครงสร้างไดเรกทอรีที่มีลักษณะดังนี้: /myproject/code ปกติฉันจะมีการเชื่อมต่อ ssh ไปยังเซิร์ฟเวอร์และ 'ยืน' ในไดเรกทอรีนั้น: root@machine:/myproject/code# เมื่อฉันปรับใช้รหัสรุ่นใหม่ของฉันไดเรกทอรีรหัสจะถูกลบออกดังนั้นฉันจึงเหลือ: root@machine:/myproject/code# ./run -bash: ./run: No such file or directory และทางออกเดียวที่ฉันพบคือ cd out and back in: root@machine:/myproject/code# cd ../code root@machine:/myproject/code# ./run Running... ฉันจะหลีกเลี่ยงสิ่งนี้ได้หรือไม่? มันเป็นพฤติกรรมที่ค่อนข้างแปลก หากคุณมีคำอธิบายที่ดีว่าทำไมสิ่งนี้เกิดขึ้นฉันจะขอบคุณมัน

2
คำสั่งระบบเช่น ls ถูกสร้างขึ้นได้อย่างไร?
ฉันมีข้อสงสัยเกี่ยวกับ * ระวัง ฉันไม่ทราบว่าไฟล์เรียกทำงานประเภทใดlsไม่ว่าจะเป็น. sh หรือ. ksh หรือระบบปฏิบัติการประเภทอื่น ๆ หากเป็นเช่นนั้นมันคืออะไร เมื่อฉันพยายามที่จะดูว่าซอร์สโค้ดของlsคำสั่งมีลักษณะอย่างไรจะแสดงสิ่งที่อ่านไม่ได้วิธีใดที่ * nix ใช้ในการสร้างไฟล์ที่อ่านไม่ได้ประเภทเหล่านี้และฉันสามารถทำให้ไฟล์ของฉันคล้ายกับไฟล์เหล่านี้ (เช่นls- ไม่สามารถอ่านได้)

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
ค้นหาคำสั่งก่อนหน้าด้วยคำนำหน้าเหมือนกันเมื่อฉันกดขึ้นที่ shell prompt
มาจากโลก FreeBSD ฉันต้องการที่จะทำให้ลินุกซ์เทอร์มิประพฤติเช่น FreeBSD หนึ่งโดยเฉพาะอย่างยิ่งรุ่น 9.1 โดยทั่วไปเมื่อคุณพิมพ์cdในขั้วและผลักดัน "ขึ้น" ลูกศรที่คุณสามารถเรียกดูคำสั่งทั้งหมดในประวัติศาสตร์ที่เริ่มต้นด้วยcdซึ่งจะทำให้คุณ ได้รับเวลามาก ฉันไม่ทราบวิธีการเปิดใช้งานคุณสมบัตินี้ใน Linux Debian หรือ CentOS ซึ่งบังคับให้ฉันพิมพ์ทั้งหมดคนสามารถช่วยได้

6
เหตุใดจึงไม่แนะนำให้ใช้นามแฝงเหนือคำสั่งมาตรฐาน
ตัวอย่างเช่นนามแฝงทั่วไปที่ฉันเคยเห็นใน~/.bashrcไฟล์ (หรือเทียบเท่า) คือ alias rm='rm -i' อย่างไรก็ตามฉันเคยเห็นคนแนะนำเรื่องนี้เพราะ นามแฝงอาจไม่มีอยู่ในระบบอื่นและเนื่องจากคุณไม่ประมาทrmคุณจะลบสิ่งที่สำคัญโดยไม่ได้ตั้งใจ [1] โดยการใช้นามแฝงนี้คุณจะฝึกตัวเองให้พิมพ์yหรือyesตามrmคำสั่งทุกคำสั่งซึ่งเอาชนะวัตถุประสงค์ทั้งหมด มีเหตุผลอื่นอีกไหมที่แนะนำเรื่องนี้? อาจมีบางโปรแกรมที่โทรไปหาrmแทนที่จะใช้ชื่อแทน\rmอาจทำให้เกิดปัญหาได้ ฉันใช้rmเป็นเพียงตัวอย่าง แต่ฉันเห็นคำสั่งอื่น ๆ เช่นcpหรือmvครอบคลุมโดยนามแฝงเช่นกัน โดยส่วนตัวฉันค่อย ๆ ฝึกฝนตัวเองให้ใช้นามแฝงแบบนี้แทนrm -i: alias trash=`mv -v -t $HOME/.Trash`

3
วิธีลบส่วนหนึ่งของเส้นทางในเชลล์แบบโต้ตอบได้อย่างไร
มีทางลัดใน bash และ zsh เพื่อลบองค์ประกอบหนึ่งของเส้นทางหรือไม่? ตัวอย่างเช่นถ้าฉันพิมพ์ls ~/local/color/และเคอร์เซอร์อยู่ที่ท้ายบรรทัดมีทางลัดในการลบcolor/ที่ท้ายหรือไม่ เป็นการดีที่ฉันต้องการโซลูชันทั้งในโหมด vi และโหมด emacs
19 bash  shell  zsh 

5
วิธีการคอมเม้นท์คำสั่งหลายบรรทัดในเชลล์สคริปต์
เมื่อเรียกใช้คำสั่ง switch-heavy เป็นเวลานานจะเป็นการดีหากเขียนคำสั่งลงในเชลล์สคริปต์ มีวิธีที่ง่ายในการแสดงความคิดเห็นบรรทัดในสคริปต์ดังกล่าวหรือไม่ ฉันได้ลองวิธีต่อไปนี้แล้ว แต่ไม่ได้ผล # the \ is also commented out, resulting in "command" and "--good-switch". command \ #--bad-switch \ --good-switch \ # seems to send an extra argument to the command command \ \ #--bad-switch \ --good-switch
19 shell 

2
ฉันจะทดสอบเพื่อดูว่ามีแอปพลิเคชันอยู่ใน $ PATH ได้อย่างไร
ฉันพยายามที่จะเขียนshสคริปต์เริ่มต้น / env ทั้งหมดของฉันเพื่อทำงานกับDRYให้มากที่สุดเท่าที่จะเป็นไปได้: "ใช้ได้กับทุก ๆ * * * * * * * * * * * * * * * * * * * * * * * นี่หมายถึงการทำให้แน่ใจว่าถ้าฉันพยายามเรียกใช้รหัสที่ไม่มีอยู่นั้นรหัสนั้นจะล้มเหลวอย่างงดงาม ด้วยเหตุนี้ฉันต้องสามารถทดสอบว่ามีโปรแกรมอยู่หรือไม่ ฉันรู้วิธีทดสอบว่ามีไฟล์อยู่หรือไม่ แต่ฉันไม่แน่ใจว่าจะทดสอบอย่างไรเพื่อดูว่าแอปพลิเคชันสามารถทำงานได้ภายในพา ธ หรือไม่ ฉันควรใช้ $ PATH เนื่องจากบางส่วนของสิ่งเหล่านี้จำเป็นต้องใช้กับ arch, ubuntu และ centos บางระบบอาจถูกติดตั้งในบ้านของฉันในระบบที่ฉันไม่มีรูทและบางระบบอาจไม่ได้ติดตั้งและอื่น ๆ ที่ติดตั้งในพา ธ ของระบบ

16
เครื่องคิดเลขบรรทัดคำสั่งง่าย ๆ
ปัญหา: ทุก ๆ ครั้งที่ฉันต้องทำเลขคณิตอย่างง่ายในสภาพแวดล้อมบรรทัดคำสั่ง EG ได้รับเอาต์พุตต่อไปนี้: Disk /dev/sdb: 256GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 106MB 105MB fat32 hidden, diag 2 106MB 64.1GB 64.0GB ext4 3 64.1GB 192GB 128GB ext4 5 236GB 256GB 20.0GB linux-swap(v1) วิธีง่ายๆในการคำนวณในบรรทัดคำสั่งขนาดของพื้นที่ที่ไม่ได้ปันส่วนระหว่างพาร์ติชัน 3 …
19 shell  calculator 

4
ทำไมบางคำสั่งไม่อ่านจากอินพุตมาตรฐาน?
ฉันสงสัยว่าเมื่อไหร่ที่เราควรใช้ไปป์ไลน์และเมื่อใดที่เราไม่ควรทำ พูดเช่นเพื่อฆ่ากระบวนการบางอย่างที่จัดการไฟล์ pdf ข้อมูลต่อไปนี้จะไม่ทำงานโดยใช้ไปป์ไลน์: ps aux | grep pdf | awk '{print $2}'|kill แต่เราสามารถทำได้ด้วยวิธีต่อไปนี้เท่านั้น: kill $(ps aux| grep pdf| awk '{print $2}') หรือ ps aux | grep pdf | awk '{print $2}'| xargs kill อ้างอิงจากman bash(เวอร์ชั่น4.1.2): The standard output of command is connected via a pipe to the standard input …
19 shell  pipe  arguments  stdin 

5
การเปลี่ยนแปลงไฟล์การมอนิเตอร์ + การเข้าถึงไฟล์
ฉันต้องการที่จะเห็นสิ่งที่เกิดขึ้นในโฟลเดอร์เซิร์ฟเวอร์แอปของฉันคือไฟล์ใดบ้างที่ถูกเปลี่ยนแปลงโดยกระบวนการ x หรือ*.warไฟล์ใดที่มีการเปลี่ยนแปลง (แทนที่ / สร้าง) ในช่วง x นาทีสุดท้าย มีเครื่องมือใน Linux เพื่อช่วยในเรื่องนี้หรือไม่?

3
Mac OS X: ไม่พบ dircolors?
ฉันเพิ่งเปลี่ยนมาใช้ Macbook Air ผมติดตั้ง zsh ใช้ Homebrew แต่เมื่อฉันใช้บางส่วนของรหัสที่ฉัน ( แต่เดิมมี) ในของฉันฉันได้รับข้อผิดพลาดบอกว่า.zshrc.dircolors was not found ด้านล่างนี้เป็นรหัสที่เป็นปัญหา: zstyle ':completion:*' auto-description 'specify: %d' zstyle ':completion:*' completer _expand _complete _correct _approximate zstyle ':completion:*' format 'Completing %d' zstyle ':completion:*' group-name '' zstyle ':completion:*' menu select=2 eval "$(dircolors -b)" zstyle ':completion:*:default' list-colors ${(s.:.)LS_COLORS} zstyle ':completion:*' list-colors …
19 shell  osx  coreutils 


1
เพิ่มความแม่นยำ% e ด้วยคำสั่ง / usr / bin / time
เมื่อฉันรันคำสั่ง time ใน shell time ./myappฉันจะได้ผลลัพธ์ดังนี้: real 0m0.668s user 0m0.112s sys 0m0.028s อย่างไรก็ตามเมื่อฉันเรียกใช้คำสั่ง\time -f %e ./myappฉันสูญเสียความแม่นยำและฉันได้รับ: 2.01s ถ้าฉันใช้%Eคำสั่งฉันก็จะสูญเสียความแม่นยำไปในทางเดียวกัน ฉันจะเปลี่ยนเพื่อให้มีความแม่นยำมากขึ้นอีกครั้งได้อย่างไร ฉันอ้างอิงงานวิจัยของฉันในคำสั่ง Linux / Unix นี้: เวลาและตามคำถามนี้
19 shell  scripting  time 

5
ฉันจะตรวจจับได้อย่างไรว่าไม่มีตัวเลือกใดถูกส่งผ่านด้วย getopts
ฉันมีรหัสนี้ - #getoptDemo.sh usage() { echo "usage: <command> options:<w|l|h>" } while getopts wlh: option do case $option in (w) name='1';; (l) name='2';; (h) name='3';; (*) usage exit;; esac done print 'hi'$name เมื่อผมทำงานbash getoptDemos.sh(ไม่มีตัวเลือก) จะพิมพ์แทนการเรียกฟังก์ชั่นhi usageมันเรียกการใช้งานเมื่อตัวเลือกอื่นนอกเหนือจาก w, h และ l จะได้รับ จากนั้นไม่สามารถใช้งานได้เมื่อไม่มีการระบุตัวเลือก ผมได้ลองใช้?, \?, :ในสถานที่ของ*แต่ฉันไม่สามารถบรรลุสิ่งที่ผมอยากจะ ผมหมายถึงทั้งหมดที่docsเกี่ยวกับการบอกว่ามันกับการใช้งานgetopt? ผมทำอะไรผิดหรือเปล่า?
19 bash  shell  options  getopts 

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