2012-06-02 25 views
6

Tôi đang chạy tập lệnh bash và tôi muốn điền trước một dòng lệnh bằng một số lệnh sau khi thực thi tập lệnh. Điều kiện duy nhất là kịch bản không được chạy vào thời điểm đó.Cách điền trước dòng lệnh

Những gì tôi cần là ...

  1. chạy kịch bản
  2. đã điền sẵn văn bản trong dòng lệnh của tôi SAU kịch bản đã được dừng lại

Là nó thậm chí có thể? Tất cả những gì tôi đã thử là mô phỏng tập lệnh bash bằng cách sử dụng

read -e -i "$comm" -p "[[email protected]$HOSTNAME $PWD]$ " input 
command $input 

Nhưng tôi đang tìm một thứ đơn giản hơn.

Trả lời

9

Bạn cần sử dụng TIOCSTI ioctl. Dưới đây là một chương trình ví dụ C cho thấy cách hoạt động:

#include <sys/ioctl.h> 

main() 
{ 
    char buf[] = "date"; 
    int i; 
    for (i = 0; i < sizeof buf - 1; i++) 
     ioctl(0, TIOCSTI, &buf[i]); 
    return 0; 
} 

Biên dịch này và chạy nó và "ngày" sẽ được đệm như đầu vào stdin, mà vỏ của bạn sẽ đọc sau khi thoát khỏi chương trình. Bạn có thể cuộn điều này thành một lệnh cho phép bạn thứ gì đó vào luồng đầu vào và sử dụng lệnh đó trong tập lệnh bash của bạn.

Các vấn đề liên quan