Đây là một chương trình sẽ giúp:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <string.h>
#include <unistd.h>
void print_help(char *prog_name) {
printf("Usage: %s [-n] DEVNAME COMMAND\n", prog_name);
printf("Usage: '-n' is an optional argument if you want to push a new line at the end of the text\n");
printf("Usage: Will require 'sudo' to run if the executable is not setuid root\n");
exit(1);
}
int main (int argc, char *argv[]) {
char *cmd, *nl = "\n";
int i, fd;
int devno, commandno, newline;
int mem_len;
devno = 1; commandno = 2; newline = 0;
if (argc < 3) {
print_help(argv[0]);
}
if (argc > 3 && argv[1][0] == '-' && argv[1][1] == 'n') {
devno = 2; commandno = 3; newline=1;
} else if (argc > 3 && argv[1][0] == '-' && argv[1][1] != 'n') {
printf("Invalid Option\n");
print_help(argv[0]);
}
fd = open(argv[devno],O_RDWR);
if(fd == -1) {
perror("open DEVICE");
exit(1);
}
mem_len = 0;
for ( i = commandno; i < argc; i++ ) {
mem_len += strlen(argv[i]) + 2;
if ( i > commandno ) {
cmd = (char *)realloc((void *)cmd, mem_len);
} else { //i == commandno
cmd = (char *)malloc(mem_len);
}
strcat(cmd, argv[i]);
strcat(cmd, " ");
}
if (newline == 0)
usleep(225000);
for (i = 0; cmd[i]; i++)
ioctl (fd, TIOCSTI, cmd+i);
if (newline == 1)
ioctl (fd, TIOCSTI, nl);
close(fd);
free((void *)cmd);
exit (0);
}
Sao chép mã trên vào một số tệp C (Ví dụ: ttyecho.c). Chạy lệnh sau trong thư mục bạn đã tạo tệp C để biên dịch mã.
make ttyecho
Sao chép tệp này vào thư mục bin trong Thư mục chính của bạn. Tạo thư mục nếu nó không tồn tại. Đó là một thực hành tốt để giữ tất cả các nhị phân / thực thi tùy chỉnh trong thư mục bin này.
Bắt đầu một thiết bị đầu cuối khác hoặc chuyển sang bất kỳ thiết bị đầu cuối mở nào khác mà bạn muốn kiểm soát và thực hiện lệnh tty. Bạn có thể thấy một đầu ra mẫu bên dưới.
@~$ tty
/ dev / điểm / 5
Bây giờ để thực thi lệnh trên / dev / pts / 5 , hãy chạy lệnh sau trong thiết bị đầu cuối kiểm soát / gốc.
sudo ttyecho -n /dev/pts/5 ls
Bạn sẽ thấy lệnh ls được thực thi trong / dev / pts / 5 . Các -n tùy chọn làm cho ttyecho gửi một dòng mới sau khi lệnh, do đó lệnh được thực thi và không chỉ chèn vào. Tiện ích này có thể Infact được sử dụng để gửi bất kỳ dữ liệu đến thiết bị đầu cuối khác Đối với ví dụ, bạn có thể mở vim trong / dev / pts / 5 và sau đó chạy lệnh sau trong việc kiểm soát thiết bị đầu cuối để gây vim để thoát trong / dev / pts / 5 .
sudo ttyecho -n /dev/pts/5 :q
Để tránh sử dụng sudo mọi lúc, để lệnh có thể dễ dàng được script, hãy thay đổi chủ sở hữu / quyền của tệp thực thi này bằng các lệnh sau.
sudo chown root:root ttyecho
sudo chmod u+s ttyecho
NB: Đặt bit setuid có thể trở thành rủi ro bảo mật.
Nguồn: http://www.humbug.in/2010/utility-to-send-commands-or-data-to-other-terminals-ttypts/