এটি এমন একটি প্রোগ্রাম যা সাহায্য করবে:
#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);
}
উপরের কোডটি কয়েকটি সি ফাইলে অনুলিপি করুন (উদাহরণস্বরূপ, ttyecho.c)। কোডটি সংকলন করতে আপনি সি ফাইল তৈরি করেছেন সেই ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান।
make ttyecho
আপনার হোম ডিরেক্টরি অনুসারে বিন ডিরেক্টরিতে এই ফাইলটি অনুলিপি করুন। ডিরেক্টরি উপস্থিত না থাকলে এটি তৈরি করুন। এই বিন ডিরেক্টরিতে সমস্ত কাস্টম বাইনারি / এক্সিকিউটেবলকে রাখা ভাল অভ্যাস।
অন্য একটি টার্মিনাল শুরু করুন বা অন্য কোনও উন্মুক্ত টার্মিনালটিতে স্যুইচ করুন যা আপনি tty কমান্ডটি নিয়ন্ত্রণ করতে এবং চালাতে চান। আপনি নীচে একটি নমুনা আউটপুট দেখতে পারেন।
@~$ tty
আপনার / dev / পয়েন্ট / 5
এখন / dev / pts / 5- এ একটি কমান্ড চালাতে, নিয়ন্ত্রণ / মূল টার্মিনালে নিম্নলিখিত কমান্ডটি চালান।
sudo ttyecho -n /dev/pts/5 ls
আপনি দেখতে পাবেন ls কমান্ডটি / dev / pts / 5 এ এক্সিকিউটেড হয়েছে । -N বিকল্প যাতে কমান্ড মৃত্যুদন্ড কার্যকর এবং পরার মাত্র সন্নিবেশিত ttyecho কমান্ড পর একটি newline পাঠান, করে তোলে। এই ইউটিলিটিটি অন্য টার্মিনালগুলিতে কোনও ডেটা প্রেরণে ব্যবহার করা যেতে পারে যেমন উদাহরণস্বরূপ, আপনি / dev / pts / 5 -র মধ্যে vim খুলতে পারেন এবং তারপরে নিয়ন্ত্রক টার্মিনালে নীচের কমান্ডটি চালিয়ে vim / dev / pts / 5 এ বেরিয়ে যেতে পারেন ।
sudo ttyecho -n /dev/pts/5 :q
সুডো সর্বদা ব্যবহার এড়াতে, যাতে কমান্ডটি সহজে স্ক্রিপ্টযোগ্য হয়, নিম্নলিখিত আদেশগুলি ব্যবহার করে এই নির্বাহযোগ্যের মালিক / অনুমতিগুলি পরিবর্তন করুন।
sudo chown root:root ttyecho
sudo chmod u+s ttyecho
নোট: সেটুইড বিট সেট করা একটি সুরক্ষা ঝুঁকিতে পরিণত হতে পারে।
সূত্র: http://www.humbug.in/2010/utility-to-send-commands-or-data-to-other-terminal-ttypts/