2012-02-22 35 views

Trả lời

14

Lý do là

echo ps 

chỉ in ra chuỗi ps; nó không chạy chương trình ps. Phiên bản hiệu chỉnh của lệnh của bạn sẽ là:

ps | grep $PPID | cut -d" " -f4 

Edited thêm: paxdiablo chỉ ra rằng ps | grep $PPID bao gồm rất nhiều khoảng trắng sẽ được sụp đổ bởi echo $(ps | grep $PPID) (kể từ khi kết quả của $(...), khi nó không phải ở đôi -quotes, được phân tách bằng khoảng trắng thành các đối số riêng biệt, và sau đó echo xuất tất cả đối số của nó được phân tách bằng dấu cách). Để giải quyết điều này, bạn có thể sử dụng tr để "ép" không gian lặp đi lặp lại:

ps | grep $PPID | tr -s ' ' | cut -d' ' -f5 

hoặc bạn chỉ có thể gắn bó với những gì bạn có để bắt đầu với. :-)

+0

Đối với một số lý do, echo $ (ps | grep $ PPID) | cut -d "" -f4 sẽ cho tôi "bash" trong khi ps | grep $ PPID | cut -d "" -f4 chỉ cho tôi một khoảng trống – ZPS

+0

Không hoàn toàn. Phiên bản đầu tiên có tác dụng phụ của không gian sụp đổ. – paxdiablo

+0

Awwwww bạn nói đúng! cảm ơn – ZPS

2

Tôi nghĩ rằng nếu bạn chỉ chạy echo ps ngày của riêng mình, bạn sẽ thấy lý do tại sao ống của bạn không hoạt động:

$ echo ps 
ps 

Thay vào đó, kiểm tra $0. Lưu ý rằng nó có thể là -bash hoặc bash, tùy thuộc vào đó là vỏ đăng nhập . (Vâng, bất kỳ trình bao nào - không chỉ là bash - nhưng dấu gạch ngang được thêm vào nếu trình bao là vỏ đăng nhập.)

5

Dòng đầu tiên:

echo $(ps | grep $PPID) | cut -d" " -f4 

nói:

  • Execute ps | grep $PPID trong một tiểu vỏ
  • Return đầu ra - đó sẽ là một cái gì đó như thế này:

    3559 pts/1 00:00:00 bash 
    

    và sau đó sử dụng đầu ra đó làm Tham số đầu tiên của echo - mà, trong thực tế, có nghĩa là chỉ echo ra

  • Sau đó chạy cut -d" " -f4 trên đó - mang đến cho bạn tên lệnh trong trường hợp này

Lệnh thứ hai:

echo ps | grep $PPID | cut -d" " -f4 

nói:

  • Echo chuỗi ps
  • Grep chuỗi đó cho $PPID - điều này sẽ không bao giờ trả về bất cứ điều gì, vì $PPID chứa một số, vì vậy nó sẽ không bao giờ là ps. Do đó, grep trả về không có gì
  • Execute cut -d" " -f4 với đầu vào của lệnh trước đó - đó là không có gì, vì vậy bạn nhận được gì
Các vấn đề liên quan