Может RSH быть сказанным использовать определенную оболочку

Синтаксис -k<start>[<flags>][,<end>[<flags>]] (если ,<end> опущен, это - конец строки).

Это определяет часть строки к виду на как один ключ сортировки.

<start> и <end> обратитесь к полевым числам. 2 для <start> означает начало 2-го поля, в то время как 2 для <end> означает конец 2-го поля.

По умолчанию поля разграничены переходом между непробелом и пробелом. Например, в:

NODE_154_length  847 2997

Поля:

[NODE_154_length][  847][ 2997]

Выполнение sort -k2, виды со стороны строки, которая запускается в начале 2-го поля и концов в конце строки. Таким образом выше, на [ 847 2997]. sort делает лексические сравнения быть значением по умолчанию.

sort -k2,2 рассмотрел бы только [ 847] для сравнения.

Если Вы хотите сделать числовое сравнение на конкретном ключе, необходимо добавить n <flag> к ключу сортировки. Тот путь,  847 был бы преобразован в число. Вот почему -k2,2n и -k2n работал бы то же потому что оба [ 847] и [ 847 2997] строки преобразовывают в число 847.

Так, для получения первого результата Вы хотите отсортировать на первом поле лексикографически, и затем (где первый полевой вид одинаково) на втором поле численно. Это записано:

sort -k1,1 -k2,2n

Во втором случае Вы хотите отсортировать на втором поле численно и когда они сортируют то же, сохраняют первоначальный заказ.

Это - то, где Вам нужно -s опция для стабильного вида:

sort -s -k2,2n

(по умолчанию, где ключи сортируют то же, sort обращения к выполнению лексического сравнения целой строки; -s отключает это).

2
07.01.2015, 16:56
3 ответа

Если вы можете сделать приложение использовать синтаксис SH вместо синтаксиса CSH. CSH используется очень немногими людьми в этом столетии и часто не устанавливается по умолчанию. Sh - стандарт. Фактически для такой простой команды вам даже не нужно заботиться о оболочке: вы можете просто позвонить в программу ENV .

rsh MACHINE "env DISPLAY=machine:0 TESTVALUE1='test' scenTime=0 simName='name' /devel/test/run.sh"

Если вы не можете изменить приложение, но ваша оболочка - это Bash, вы можете использовать quirk of Bash: когда это не интерактивная система входа в систему, а когда его родительский процесс rshd или SSHD , Bash Runs ~ / .Bashrc (который также является файлом, загруженным интерактивными снарядами входа в систему). Вы могли бы поставить это в свой .Bashrc , чтобы определить функцию функцию для эмуляции CSH:

if [[ $- != *i* ]]; then
  # Non-interactive shell
  setenv () {
    export "$1=$2"
  }
  return
fi
2
27.01.2020, 22:05

Вы можете передать все свои команды в качестве аргумента в опцию -c.

Попробуйте:

rsh MACHINE csh -c '<your command>'
1
27.01.2020, 22:05

Простой ответ: нет, вы не можете пропустить то, что в / etc / profile и оболочка, указанная в / etc / passwd , святая.

Представьте, что произойдет, если бы кто-то попытался войти в систему, используя системную учетную запись с Shell / Bin / Nologin и нет пароля. Это было бы катастрофой, если будет разрешено RSHD (или любая другая программа) для отмены такой базовой безопасности.

Вы должны пойти через корпус ваших пользователей Shell (что бы она ни было) и выполнить вашу команду оттуда. Если это одна команда: попросите RSH делать только что для вас.

rsh -l remoteuser host.example.com "mkdir testdir"

Источник: Википедия

Я предполагаю, что вы знаете неуверенность RSH и что лучше использовать SSH. Особенно в автоматизированных процессах, потому что вы можете использовать аутентификацию открытого ключа. (Итак, вам не нужно отключить пароль или хранить незашифрованный пароль в вашей программе.) Вы можете даже попытаться связать свою программу libssh2

0
27.01.2020, 22:05

Теги

Похожие вопросы