String ze slashem, backslashem i apostrofem, jak wysłać w oryginalnej postaci.

0

Witam serdecznie. Mam mały problem. Potrzebuję za pomocą sshnet wysłać komendę na linuksową maszynę. Treść jaką maszyna musi odebrać to "cat /proc/cpuinfo |grep 'model name'|awk '{print $4" "$5" "$6" "$7" "$8" "$9}' head -n 1'" i tu mam problem. Oczywiście da się to zapisać tak żeby visual studio nie krzyczało za pomocą "" lub @ i ", jednak przy wysyłaniu przez klienta komendy są one tłumaczone na "cat /proc/cpuinfo |grep 'model name'|awk '{print $4 " "$5 " " $6" "$7 " " $8 " " $9}' head -n 1'" czego niestety linuksowa maszyna nie interpretuje.
Czy ktoś jest mi w stanie podpowiedzieć jak to ogarnąć. Dodam jeszcze tylko, że string jest zapisany w tablicy.

0

"a\x34a" == "a"a"

0

"cat /proc/cpuinfo |grep 'model name'|awk '{print $4 \x34 \x34 $5 \x34 \x34 $6 \x34 \x34 $7 \x34 \x34 $8 \x34 \x34 $9}' head -n 1'"; == "cat /proc/cpuinfo |grep 'model name'|awk '{print $4 4 4 $5 4 4 $6 4 4 $7 4 4 $8 4 4 $9}' head -n 1'"

@"cat /proc/cpuinfo |grep 'model name'|awk '{print $4 \x34 \x34 $5 \x34 \x34 $6 \x34 \x34 $7 \x34 \x34 $8 \x34 \x34 $9}' head -n 1'"; == "cat /proc/cpuinfo |grep 'model name'|awk '{print $4 \x34 \x34 $5 \x34 \x34 $6 \x34 \x34 $7 \x34 \x34 $8 \x34 \x34 $9}' head -n 1'"

0

Mały bug się wkradł tam pewnie miało być \x22 = " \x34 = 44 ;D

0

wynikiem nadal jest "cat /proc/cpuinfo |grep 'model name'|awk '{print $4 " " $5 " " $6 " " $7 " " $8 " " $9}' head -n 1'"

0

Bez znaków cudzysłowy zapytanie awk i tak przejdzie.

Jeśli wypisujesz tą tablice u siebie w terminalu i jest poprawna to znaczy, że sshnet musi parsować tego stringa.

0

Owszem, ale będzie to zlepek kilku wyrazów, co jest bez sensu. Cudzysłowy jednak miały na celu oddzielenie je od siebie

0

Oczywiście da się to zapisać tak żeby visual studio nie krzyczało za pomocą "" lub @ i ", jednak przy wysyłaniu przez klienta komendy są one tłumaczone

Pokaż kod jak to wysyłasz. Bo coś źle robisz.

C:\>copy con a.cs
class A { static void Main() {
System.Console.WriteLine(@"cat /proc/cpuinfo |grep 'model name'|awk '{print $4"" ""$5"" ""$6"" ""$7"
" ""$8"" ""$9}' head -n 1'");
} }
^Z
Liczba skopiowanych plików:         1.

C:\>csc a.cs /nologo

C:\>a
cat /proc/cpuinfo |grep 'model name'|awk '{print $4" "$5" "$6" "$7" "$8" "$9}' head -n 1'

C:\>
0

Ok, jest tak

    class SshCommandList
    {
        public string SshCommandDictionary(string name)
        {
            Dictionary<string, string> command = new Dictionary<string, string>();
            
            command["cpuInfo"] = @"cat /proc/cpuinfo |grep 'model name'|awk '{pprint $4"" ""$5"" ""$6"" ""$7}' head -n 1'";
            command["core0Temp"] = "sensors |grep 'Core 0'|awk '{print $3}'";
            command["core1Temp"] = "sensors |grep 'Core 1'|awk '{print $3}'";
            command["core2Temp"] = "sensors |grep 'Core 2'|awk '{print $3}'";
            command["core3Temp"] = "sensors |grep 'Core 3'|awk '{print $3}'";
            command["gpuTemp"] = "sensors |grep 'temp1:'|awk '{print $2}'"; 



            string errorValue = "";

            if (command.ContainsKey(name))
            {
                errorValue = command[name];
            }
            else
            {
                errorValue = "Brak takiej komendy" + name.ToString();
            }
            return errorValue;
        }
    } 

nastepnie uzywam tego w ten sposob

                                            if (client.IsConnected)
                {
                    List<Command> d = new List<Command>();

                    d.Add(new Command { Name = "core0Temp", sshCommand = command.SshCommandDictionary("core0Temp") });
                    d.Add(new Command { Name = "core1Temp", sshCommand = command.SshCommandDictionary("core1Temp") });
                    d.Add(new Command { Name = "gpuTemp", sshCommand = command.SshCommandDictionary("gpuTemp") });
                    d.Add(new Command { Name = "cpuInfo", sshCommand = command.SshCommandDictionary("cpuInfo") });

                    foreach (var x in d)
                    {
                        switch (x.Name)
                        {
                            case "core0Temp":
                                var core0 = client.CreateCommand(x.sshCommand);
                                core0Temp = core0.Execute().ToString();
                                break;

                            case "core1Temp":
                                var core1 = client.CreateCommand(x.sshCommand);
                                core1Temp = core1.Execute().ToString();
                                break;

                            case "gpuTemp":
                                var gpu = client.CreateCommand(x.sshCommand);
                                gpuTemp = gpu.Execute().ToString();
                                break;

                            case "cpuInfo":

                                var cpu = client.CreateCommand(x.sshCommand);
                                cpuInfo = cpu.Execute().ToString();
                                break;

                            default:

                                break;
                        }


                    }

                }

i x.sshCommand (dla cpuInfo) == "cat /proc/cpuinfo |grep 'model name'|awk '{pprint $4" "$5" "$6" "$7}' head -n 1'"

1

Możesz zawartość komendy potraktować base64, przesyłać, zdalnie zdekodować i wykonać

marek2:~/workspace/files $ cat /proc/cpuinfo |grep 'model name'|awk '{print $4" "$5" "$6" "$7" "$8" "$9}'|head -n 1
Intel(R) Xeon(R) CPU @ 2.50GHz 
marek2:~/workspace/files $ base64
cat /proc/cpuinfo |grep 'model name'|awk '{print $4" "$5" "$6" "$7" "$8" "$9}'|head -n 1Y2F0IC9wcm9jL2NwdWluZm8gfGdyZXAgJ21vZGVsIG5hbWUnfGF3ayAne3ByaW50ICQ0IiAiJDUi
ICIkNiIgIiQ3IiAiJDgiICIkOX0nfGhlYWQgLW4gMQ==
marek2:~/workspace/files $ echo Y2F0IC9wcm9jL2NwdWluZm8gfGdyZXAgJ21vZGVsIG5hbWUnfGF3ayAne3ByaW50ICQ0IiAiJDUiICIkNiIgIiQ3IiAiJDgiICIkOX0nfGhlYWQgLW4gMQ==|base64 -d|sh
Intel(R) Xeon(R) CPU @ 2.50GHz
0

Piękne dzięki, ten sposób działa jak należy. Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1