কিভাবে একটি টিটিওয়াই টার্মিনালে টার্মিনাল কমান্ড প্রেরণ করা যায়


8

আমি একটি টিটিওয়াই টার্মিনালে একটি নির্বাহিত কমান্ড প্রেরণের একটি উপায় খুঁজছি। উদাহরণস্বরূপ, আসুন আমরা বলি যে আমি জিনোম-টার্মিনালটি এবং উইন্ডোটি টাইপ করি sudo aptitude update && sudo aptitude upgrade

টিটিওয়াই 7 জিইউআই পরিবেশে এটির সাথে কাজ না করে কীভাবে আমি এটি টিটিওয়াই টার্মিনালে প্রেরণ করতে পারি?

উত্তর:


7

আমি সরাসরি এটি না করার সুপারিশ করব, তবে একটি টার্মিনাল মাল্টিপ্লেক্সার, যেমন টিএমউক্স, একটি ইন-মধ্যবর্তী হিসাবে ব্যবহার করুন।

টার্মিনালে যা সনাক্তকারী দিয়ে tmux কমান্ডটি শুরু করতে হবে:

tmux new-session -s MYSES

এটিতে কমান্ড প্রেরণ করুন:

tmux send-keys -t MYSES "sudo aptitude update && sudo aptitude upgrade"$'\n'

আপনি যদি বাইবু ব্যবহার করেন তবে এটিও কাজ করে! আপনি যদি ইতিমধ্যে কোনও সেশন চালাচ্ছেন তবে আপনি নামটি জানেন না তবে আপনি -t MySES ড্রপ করতে পারেন। Thnx!
এক্সপ্লোয়েয়ার

10

এটি এমন একটি প্রোগ্রাম যা সাহায্য করবে:

#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/

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.