সাইগউইনে কোনও 'সুডো' কমান্ড নেই


41

কারণ সাইগউইনে কোনও সুডোর কমান্ড নেই , আমি যে স্ক্রিপ্টগুলি চালাতে চাই তা ব্যর্থ হয়েছে

./install.sh: line N: sudo: command not found

এই কাছাকাছি পেতে স্ট্যান্ডার্ড উপায় কি? স্ক্রিপ্টগুলি মুছে ফেলার জন্য সম্পাদনা করছেন sudo? sudoউইন্ডোজের জন্য কিছু সদৃশ সরঞ্জাম পাচ্ছেন?


@ ডোটানকোহেন, আমি আশা করি আমি সঠিকটি বেছে নিয়েছি।
জেসন সুন্দরম

আমার কাছে ভাল সমাধান বলে মনে হচ্ছে! সাইগউইনের সমর্থনটি গত পাঁচ বছরে অবশ্যই আরও ভাল হয়েছে!
dotancohen


@ বেঞ্জ, আমি ভাবছি কেন কেন এই প্রশ্নটি এখানে স্থানান্তরিত হয় নি।
জেসন সুন্দরাম

পছন্দ করেছেন উত্তরটি সরানো থাকলে আমাকে জানান, আমি তারপরে লিঙ্কটি আপডেট করব।
বেঞ্জ

উত্তর:


8

আমি সাইগউইনের জন্য সুডোর জন্য (বরং সাধারণ) টুএএসএক্সেক্সট লিখেছি , একটি প্রাক-বিটা শেল স্ক্রিপ্ট অটোমেশন যা লিনাক্সের জন্য শাস্ত্রীয় আচরণের দিকে যায় sudo :

  • প্রয়োজন হয় এবং স্বয়ংক্রিয়ভাবে Sudoserver.py বন্ধ হয়ে যায় needed
  • অনুরোধ UAC উচ্চতার প্রম্পট।

ইনস্টলেশনের জন্য .shকয়েকটি স্ক্রিপ্ট স্ক্রিপ্টগুলি কিছু পথ ডিরেক্টরিতে অনুলিপি করা প্রয়োজন , একটি উপাধি তৈরি করা হয় এবং থ্রেডে বিশদ আরও কয়েকটি ধাপ।

ফলাফল : আপনি একটি একক টাইপ করেন sudo YourCommandএবং বাকী প্রক্রিয়া সম্পর্কে চিন্তা না করেই আপনি এর আউটপুট পান।


35

একটি উপায় নিম্নলিখিত কন্টেন্ট সহ একটি জাল "sudo" কমান্ড তৈরি করা হয়:

#!/usr/bin/bash

"$@"

এটি install.shচালিয়ে যাওয়ার অনুমতি দেবে , কারণ সুডো পাওয়া গেছে।

এটি রিয়েল সুডোর মতো সুবিধাগুলি উন্নীত করে না। আপনার যদি সত্যিই উন্নত সুবিধাগুলির প্রয়োজন হয় তবে প্রশাসনিক সুবিধাগুলি (এক্সপি) সহ একাউন্ট থেকে সাইগউইন শেল শুরু করুন বা সাইগউইন.বাট-এ ক্লিক করুন এবং "প্রশাসক হিসাবে চালান" (ভিস্তা, উইন 7)


5
সাবলীল কথা না বলে এমন কারওের কৌতূহলের বাইরে bash: কেন এই কাজ করে? ম্যানপেজটি $@কিছু পছন্দ- sudoমতো করার বিষয়ে কিছুই বলে না । পরিবর্তে এটি স্ক্রিপ্টে সমস্ত যুক্তি। এবং এর চারপাশের উদ্ধৃতিগুলি কি সেই ক্ষেত্রে অতিমাত্রায় হবে না? অন্যথায় যদি আপনি sudo foo barএটি করতে চান তবে এটি "foo bar"ইউনিক্স-এর মতো সিস্টেমে ফাঁকের অযৌক্তিক ভয় পেয়ে সম্ভবত একক কমান্ড হিসাবে কার্যকর করার চেষ্টা করে যা সম্ভবত উপস্থিত নেই।
জোয়ে

7
@ জোহানেস: "$@"(যখন ডাবল-কোট করা হয়) এর থেকে আলাদাভাবে কাজ করে "$*": এটি প্রতিটি অবস্থানীয় ভেরিয়েবলের জন্য পৃথক শব্দের কাছে প্রসারিত হয় । উদাহরণ: যদি $1 == "foo bar"এবং $2 == "baz"তারপর "$@"হয় "foo bar" baz- প্রতিটি প্যারামিটারের জন্য একটি শব্দ (বিপরীত "$*", যার ফলে "foo bar baz"এক শব্দের ফলাফল হয় )। bashবিভাগের পরামিতিগুলির , অনুচ্ছেদের বিশেষ পরামিতিগুলির ম্যানুয়াল দেখুন । পিয়নের স্ক্রিপ্টের শেষ ফলাফলটি হ'ল এটি তার আর্গুমেন্টগুলি যেমন পাস করেছিল ঠিক তেমন কার্যকর করে।
মাধ্যাকর্ষণ

1
আহ, ঠিক আছে. এবং sudoঅংশটি আসে কোথায় ? উপরের স্নিপেট সেদিকে দূরবর্তীভাবে কিছু করে না, তাই না?
জোয়

2
@ জোহানেস: ইউনিক্সে, সত্যিকারের sudoপক্ষ থেকে rootকমান্ড চালানোর আগে মরণশীল থেকে শুরু করে সুযোগ সুবিধা বাড়ানো হত । সাইগউইনে এ জাতীয় কোনও জিনিস নেই, তাই পিয়নের ভুয়া স্ক্রিপ্ট (যার নাম আপনি বলেছিলেন sudo) কেবল তার কমান্ডগুলি পরিবর্তন না করে সরাসরি কমান্ড চালায় runs (এর অর্থ আপনার ./install.shঅ্যাডমিনিস্ট্রেটর হিসাবে চালানোর দরকার হতে পারে ))
গ্রাভিটি

2
@ গ্রাভিটি: runasকাজ করা উচিত, এটি ইউএসি-তে নির্ভর করে না এবং নিজেই একটি পাসওয়ার্ডের অনুরোধ জানায়। আমি শুধু বিভ্রান্ত হয়ে পড়েছিলাম যে উত্তরের লিপিটি দৃশ্যত নামটি কী বলেছিল তা আমি হ'ল লক্ষ্যটিই অনুধাবন করেছিল do আমার বোকামির জন্য দুঃখিত ;-)
জোয়ি

21

আমি উত্তরটি সাইগউইন মেলিংয়ের তালিকায় পেয়েছিcommandসাইগউইনে উন্নত সুবিধাগুলি সহ চালানোর জন্য , কমান্ডটি এর আগে তৈরি করুন cygstart --action=runas:

$ cygstart --action=runas command

এটি প্রশাসনের পাসওয়ার্ড জানতে চাইলে একটি উইন্ডোজ ডায়লগ বাক্স খুলবে এবং সঠিক পাসওয়ার্ড প্রবেশ করানো হলে কমান্ডটি চালাবে।

এটি সহজে স্ক্রিপ্ট করা যায়, যতক্ষণ ~/binআপনার পথে থাকে:

$ cat ~/bin/sudo
#!/usr/bin/bash
cygstart --action=runas "$@"

$ PATH=$HOME/bin:$PATH
$ chmod +x ~/bin/sudo
$ sudo elevatedCommand

64-বিট উইন্ডোজ 8 এ পরীক্ষিত।


5
cygstartপদ্ধতির সমস্যাটি হ'ল এটি কেবল উইন্ডোজ কমান্ড / প্রোগ্রামগুলির জন্য কাজ করে। আপনি করতে পারবেন না sudo ls। সাইগউইনের পক্ষে সুডো ঝরঝরে, তবুও এতে কিছু ভাল sudoকমান্ডের অভাব রয়েছে ।
সোপালাজো ডি অ্যারিরিজ

আপনাকে ধন্যবাদ, সোপালাজোড কোন পরিস্থিতিতে আপনার sudo lsসাইগউইন ব্যবহার করা উচিত ?
dotancohen

3
ওহ, না, @ ডোটানকোহেন, এটি কেবল একটি উদাহরণ ছিল। আপনি sudoযেকোন উইন্ডোজ বা সাইগওয়িন কমান্ড চালানোর জন্য সাইগউইন ব্যবহার করতে পারেন । এটি আমার জন্য খুব উপকারী। তবে আমি যে আরও ব্যবহারিক পদ্ধতিটি খুঁজে পেয়েছি তা হ'ল সাইগউইন আমি বিকাশের জন্য এসইডিডিওর জন্য এই স্ক্রিপ্টের মোড়ক: superuser.com/questions/741345/… (এখনও বিটাতে রয়েছে, তবে কাজ করছে বলে মনে হচ্ছে)। এটির সাহায্যে আপনি আরামে পছন্দ মতো জিনিস অর্ডার করতে পারেন sudo net start vncserver
সোপালাজো ডি অ্যারিরিজ

@ সোপালাজোড অ্যারিয়েরেজ: এটি একেবারেই ভয়ঙ্কর! পোস্ট এবং লিঙ্কের জন্য আপনাকে ধন্যবাদ।
dotancohen

অদ্ভুতভাবে, এই আউট রেখাচিত্রমালা /binএবং /usr/binথেকে PATH। এটি সফলভাবে ইম্যাকগুলি শুরু করে: ShellExecute(NULL, "runas", "C:\cygwin64\bin\emacs-w32.exe", "(null)", "(null)", 1)তবে ইম্যাকগুলি lsউদাহরণস্বরূপ খুঁজে পাবে না M-x dired, এমনকি ইন্টারেক্টিভভাবে PATH ব্যবহার করে পুনরুদ্ধার করার পরেও (setenv ...)। এখানে কি কোনও বিশ্বস্ত পথের সমস্যা আছে?
বেসজেন

5

ডটানকোহেনের উত্তরে বিল্ডিং আমি একটি উপনাম ব্যবহার করছি:

alias sudo="cygstart --action=runas"

বাহ্যিক প্রোগ্রামগুলির জন্য কবজ হিসাবে কাজ করে (যদিও শেল বিল্ট-ইনগুলি নয়):

sudo chown User:Group <file>

3

উইন্ডোজ for এর জন্য সুডো (এলিভেট) ™

আমি উইন্ডোজ the-তে কমান্ড লাইনে অনেক কাজ করি ™

সাইগউইনে নিজেই আমি বিশ্বাস করি আপনি su -c /the/cmdউইন্ডোজ su ফাইল-সিস্টেমের মধ্যেই কমান্ড লাইন থেকে ব্যবহারকারীর অনুমতিগুলি উচ্চতর করার জন্য একটি রুট কমান্ড চালাতে পারবেন , আপনি যদি প্রশাসক হন তবে এটি আপনার পক্ষে দুর্দান্ত কাজ করবে। অন্যথায়, রানস ব্যবহার করুন এবং অ্যাডমিনের পাস পান;)।

এখন আমি মনে করতে পারি না আমরা এই কোডটি কোথায় পেয়েছি তবে এটি এখানে। আমি আসা করি এটা সাহায্য করবে.

বিটিডাব্লু, আমরা এটি সংকলন করতে প্যাকেজটি ব্যবহার করি gcc-mingw32

$ i586-mingw32msvc-gcc sudo.c -o sudo.exe
# Put sudo.exe in /usr/bin or in your windows path (%homedrive%\windows)
#example:
$ sudo vi /cygdrive/c/windows/system32/drivers/etc/hosts

/**
* (sudo for Windows™)
* @filename sudo.c
*/
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
#include <shellapi.h>
#include <wchar.h>


LPWSTR *mergestrings(LPWSTR *left, LPCWSTR right)
{
    size_t size = ( 1 + lstrlen(*left) + lstrlen(right) ) * sizeof(LPWSTR*);
    if ( *left ) {
        LPWSTR leftcopy = _wcsdup(*left);
        *left = (LPWSTR)realloc(*left, size);
        *left = lstrcpy(*left, leftcopy);
        *left = lstrcat(*left, right);
        free( leftcopy );
    }
    else
        *left = _wcsdup(right);
    return left;
}


int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE prevInstance, LPSTR lpcommand, int nShowCmd)
{
    DWORD result = 0x2a;
    LPWSTR *argv = NULL;
    int argc = 0;
    if ( argv = CommandLineToArgvW(GetCommandLineW(), &argc) ) {
        if ( argc < 2 ) {
            LPWSTR usagemsg = NULL;
            usagemsg = *mergestrings(&usagemsg, argv[0]);
            usagemsg = *mergestrings(&usagemsg, TEXT(" <command_to_run> [arguments]"));
            MessageBox(NULL, usagemsg, TEXT("Usage:"), MB_OK | MB_ICONEXCLAMATION );
            LocalFree( argv );
            free( usagemsg );
            return ERROR_BAD_ARGUMENTS;
        }
        else {
            LPWSTR command = argv[1];
            LPWSTR arguments = NULL;
            int c;
            for ( c = 2; c < argc; c++ ) {
                arguments = *mergestrings(&arguments, argv[c]);
                arguments = *mergestrings(&arguments, TEXT(" "));
            }
            result = (DWORD)ShellExecute(NULL, TEXT("runas"), command, arguments, NULL, SW_SHOWNORMAL);
            LocalFree( argv );
            if ( arguments )
                free( arguments );
            switch ( result )
            {
                case 0:
                    result = ERROR_OUTOFMEMORY;
                    break;

                case 27:
                case 31:
                    result = ERROR_NO_ASSOCIATION;
                    break;

                case 28:
                case 29:
                case 30:
                    result = ERROR_DDE_FAIL;
                    break;
                case 32:
                    result = ERROR_DLL_NOT_FOUND;
                    break;
                default:
                    if ( result > 32 )
                        result = 0x2a;
            }
        }
    }
    else
        result = GetLastError();

    if (result != 0x2a) {
        LPWSTR errormsg = NULL;
        FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER,
                      NULL, result, 0, (LPWSTR)&errormsg, 0, NULL);
        MessageBox(NULL, errormsg, TEXT("Error:"), MB_OK | MB_ICONERROR);
        LocalFree( errormsg );
        return result;
    }
    else
        return NO_ERROR;
}

5
এই কোডটি ভয়াবহ। এটির আকারে (* এলপিডব্লিউএসটিআর) পরিবর্তে আকারের (এলপিডব্লিউএসটিআর) লেখার আগে রিলোকের () রিটার্নের মান পরীক্ষা না করা যেমন এলপিডাব্লুএসটি একটি পয়েন্টার টাইপ বলে মনে হয় এবং একজন একটি চরিত্রের আকার পুনরুদ্ধার করতে চায় না পয়েন্টার আকার। তদ্ব্যতীত, কেন এটি সম্পূর্ণরূপে অস্পষ্ট eg আপনি কোড থেকে উপসংহার করতে পারেন কেন? আমি পারি না এবং আমি অনুমান করি যে অন্য কেউও পারে না। দয়া করে, ভবিষ্যতে এই জাতীয় কোড পোস্ট করবেন না।

4
@ ম্যাটিউ: দয়া করে ভবিষ্যতে আপনার পছন্দ না হওয়া কোড স্নিপেটের একটি পরিষ্কার সংস্করণ পোস্ট করে সম্প্রদায়টিকে সহায়তা করুন।
এরিক অলিক

কোড সুপারভাইজারে থাকা উচিত নয়। এটিকে কোডেরভিউ.সিতে রাখুন এবং এখান থেকে এটি লিঙ্ক করুন।
বেন ভয়েগট

@ ব্যবহারকারী 185282: ভাল পয়েন্ট। আমি উত্তরটি কমিয়ে দিয়েছি।
অবিস্মরণীয়

প্রিয় টাও: আপনি লিখেছেন, "আমরা এই কোডটি কোথায় পেয়েছি তা মনে করতে পারি না"। আপনি এই কোডটি লিখেছেন, বা অন্য কেউ এটি লিখেছেন?
অবিস্মরণীয়

2

পিয়ানের জাল সুডো স্ক্রিপ্টে সামান্য উন্নতি :

#!/bin/sh
# Drop any option arguments.
while [[ $# -ge 0 && $1 = -* ]]; do
  shift
done

"$@"

এই স্ক্রিপ্টটি নিঃশব্দে সুডোকে প্রদত্ত যে কোনও অপশন ফেলে দেয় এবং কমান্ডটি কার্যকর করে (প্রকৃতপক্ষে সুবিধাগুলি উন্নত না করে)। বিকল্পগুলি বাদ দেওয়া সামঞ্জস্যকে কিছুটা উন্নত করে। আরও একটি সম্পূর্ণ র‍্যাপার স্ক্রিপ্টে আসলে বিকল্পগুলি পার্স করা উচিত ঠিক যেমন সুডো করে।

যে কোনও মোড়ক দিয়ে সুডো প্রতিস্থাপন করার চেষ্টা করার পরিবর্তে cygstart --action=runas "$@", কেবলমাত্র এই সাধারণ নকল সুডো মোড়ক ব্যবহার করুন এবং আপনার ইনস্টল স্ক্রিপ্ট নিজেই চালিত করুন (বা আপনি যা যা করতে চাইছেন sudo ব্যবহার করে যাচ্ছেন) উন্নত সুবিধাগুলি সহ।

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