ทำไม pwd ไม่ยอมรับตัวเลือกที่ยาวเช่น - ฟิสิคัล?


11

เมื่อฉันแสดงคู่มือสำหรับpwdคำสั่งมันบอกว่าตัวเลือกแบบยาวที่--physicalได้รับการสนับสนุน

$ man pwd
PWD(1)                           User Commands                          PWD(1)

NAME
       pwd - print name of current/working directory

SYNOPSIS
       pwd [OPTION]...

DESCRIPTION
       Print the full filename of the current working directory.

       -L, --logical
              use PWD from environment, even if it contains symlinks

       -P, --physical
              avoid all symlinks

อย่างไรก็ตามมันล้มเหลวเมื่อฉันพิมพ์ต่อไปนี้

$ pwd --physical
-bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

เหตุใดตัวเลือกแบบยาวจึงไม่ทำงานสำหรับฉัน

ฉันใช้ RHEL 6.4 ไม่มีการกำหนดค่านามแฝงสำหรับ pwd ดูเหมือนว่าเป็น pwd มาตรฐาน:

$ which pwd
/bin/pwd

1
หน้าคู่มือใช้สำหรับยูทิลิตี้แบบสแตนด์อโลนซึ่งไม่ได้เป็นส่วนหนึ่งของการทุบตี
— Thomas Dickey

7
ใช้typeแทนwhichเนื่องจากwhichคำสั่งเพียงแสดงให้เห็นว่าในขณะที่typeคำหลักที่แสดงให้เห็นว่า builtins นามแฝงฟังก์ชั่นและคำสั่ง (และเส้นทางคำสั่งถก) สำหรับรายละเอียดเพิ่มเติมดูเหตุใดจึงไม่ใช้“ อันไหน” จะใช้อะไรดี?
— wjandrea

1
ในระบบของฉันman pwdมีบันทึกต่อไปนี้: your shell may have its own version of pwd, which usually supersedes the version described here. Please refer to your shell's documentation for details about the options it supportsที่ด้านล่างของDESCRIPTIONส่วน
— Nykakin

คำตอบ:


26

bashมีคำสั่งในตัวpwdซึ่งเป็นสิ่งที่คุณใช้เมื่อคุณพิมพ์pwdลงในเชลล์ของคุณ

เพื่อให้ได้pwdตามที่อธิบายโดย manpage คุณจำเป็นต้องใช้กำลังของคำสั่งภายนอก คุณสามารถทำได้โดยการระบุเส้นทางแบบเต็มไปปฏิบัติการ ( /bin/pwdในกรณีของคุณ) หรือ prepending envก่อนบรรทัด: env pwdซึ่งเริ่มต้นenvคำสั่งที่สามารถใช้ในการเพิ่มการตั้งค่าเพื่อสิ่งแวดล้อม ( แต่ที่ไม่ได้ทำที่นี่) และจากนั้นenvจะเริ่มต้น คำสั่งที่ระบุ เช่นเดียวกับที่envไม่มีตัวบิวpwdด์ "ของจริง" /bin/pwdจะถูกดำเนินการ

ข้อได้เปรียบของ builtin pwdin bash ก็คือการbashติดตามไดเรกทอรีปัจจุบันดังนั้นการรับค่าจึงไม่มีค่าใช้จ่ายในขณะที่คำสั่งภายนอกจำเป็นต้องค้นหาผ่านระบบไฟล์เพื่อกำหนดเส้นทางซึ่งเป็น IO ที่เข้มข้นมากขึ้น


4
นั่นไม่ใช่วิธีที่คำสั่งภายนอกใช้งานได้จริง unix.stackexchange.com/a/413225/5132
— JdeBP

BTW: คุณยังสามารถปิดการใช้งาน builtin เปลือก (อย่างน้อยในทุบตี) โดยenable -n pwd
— derobert

@JdeBP มันเคยเป็นครั้งสุดท้ายที่ฉันดู (นานมาแล้ว :-)); และในขณะที่ใช้การgetcwd()เรียกระบบเคอร์เนลยังคงสำรวจระบบไฟล์ซึ่งทำได้ง่ายกว่าในพื้นที่เคอร์เนลเนื่องจากการเข้าถึงโครงสร้างข้อมูลที่เกี่ยวข้องเนื่องจากคำตอบที่เชื่อมโยงระบุไว้: "อย่างไรก็ตามโปรดสังเกตว่าแม้ใน FreeBSD และปฏิบัติการอื่น ๆ ระบบเคอร์เนลจะไม่ติดตามไดเรกทอรีทำงานด้วยสตริง "
— wurtel

11

เอกสาร manpage /bin/pwdนั้น แต่เมื่อคุณเรียกใช้pwdคุณกำลังใช้เชลล์ในตัว ดูผลลัพธ์ของ

type pwd

built-in shell ของคุณpwdไม่รองรับตัวเลือกแบบยาว (ดูเอกสารประกอบเชลล์ของคุณเนื่องจากคุณใช้ Bash help pwdจะให้ข้อมูลสรุป)

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