Выполните .exe на доле самбы

Если путем "планирования" Вас означают, как разработка идет теперь, она похожа на это:

3.7 выпущен (и стабильная толпа запускает их строку 3.7.1, 3.7.2...), Linux открывает "merge window", приблизительно 2 недели, в течение которых он примет новые возможности (которые обычно готовили elsewehere). То, когда окно слияния закрывается, Linus выпускает 3.8-rc0 (предвыпускная версия № 0), после которого только исправления ошибок, как предполагается, входят в ядро (иногда функция, которая была объединена, забрано). Каждый на следующей неделе (приблизительно) выпуски-rc1,-rc2 Linus... пока он не удовлетворен, что больше нет ошибок (обычно вокруг-rc6), и 3.8, рождается. Затем цикл запускается снова. В то время как все это продолжается, толпа разработчика занята, взламывая на изменениях, которые будут предложены для будущих окон слияния (некоторые функции работались на буквально в течение многих лет прежде чем быть считавшим приемлемого для включения).

28
07.03.2015, 06:36
2 ответа

Вот концептуальный подход, который может работать.

Команда alias создает список всех псевдонимов, за которыми следует = и определение. Этот вывод может быть проанализирован путем извлечения имени псевдонима между первым пустым и первым = . Все после первого = будет соответствовать определению. Это звучит как что-то легко обрабатываемое с помощью ассоциативных массивов в неловком состоянии.

Два осложнения к этому (что я вижу):

1) Поскольку определение может состоять из нескольких слов, вам придется сделать что-то вроде измерения длины определения за вычетом любых кавычек и ограничить сравнение с введенной командой этой длиной.

2) Псевдонимы могут содержать некоторые странные вещи. Вот мой самый странный (и я уверен, что они могут стать намного страннее):

alias pqp='cd ~/pq;[ -n "$(ls)" ] && mprb * || echo "Print Queue Empty"'

Смысл здесь в том, что псевдонимы могут содержать (почти?) все специальные символы, которые оболочка хочет интерпретировать и расширить, поэтому лучше всего кодировать это в чем-то другом, как awk или Python, где две строки, которые нужно сравнить, будут рассматриваться как простые строки символов.

Следующая проблема заключается в том, что вы действительно хотите выполнить команду после завершения сопоставления и выдачи любых сообщений.

Здесь проблема заключается в том, что все, что вы запускаете из вашей программы, даже если это просто другой сценарий, будет (как правило) выполняться в дочернем процессе. Это означает, что любые побочные эффекты команды (на уровне оболочки) будут потеряны, когда команда завершится и субоболочка закроется. Наиболее очевидным является код возврата, $? , который вы должны будете захватить и переиздать в качестве кода возврата вашей утилиты.

Если псевдоним включает вызов с использованием источника , . команда, тогда вам будет в значительной степени не повезло, потому что запуск этого в субкорпусе полностью отменит предполагаемые побочные эффекты.

Оболочки содержат ряд встроенных команд, таких как cd . Некоторые из них имеют эквивалентные программы, как [ и /usr/bin/test , но некоторые, например, cd , не имеют и даже для тех, которые делают, встроенные версии не всегда имеют идентичное поведение и опции, которые делают внешние.

Вышеуказанные проблемы существуют, поскольку окончательная команда поступает не из стандартного ввода текущего уровня оболочки, а из-за этого обрабатывается по-другому. Здесь может помочь что-то вроде АвтоКей .

AutoKey - это макропроцессор, который может использоваться для автоматизации различных действий в среде X (GUI). В этом контексте его можно использовать для вызова макроса при нажатии определяемой пользователем горячей клавиши. Макрос может считывать и анализировать командную строку, которую вы вводите в нее, выдавать любые сообщения (об псевдонимах и т.д.), а затем повторно вводить команду, как если бы вы ввели ее на клавиатуре.

Преимущество здесь в том, что Linux (на самом деле ваша среда рабочего стола/эмулятор терминала) не может сказать, что это не вы набираете команду и все происходит в вашей оригинальной, родной среде, как если бы АвтоКей вообще не был там.

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

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

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

Короче говоря, если вы настраиваете систему так, чтобы она вела себя нестандартно, есть два основных последствия.

1) Если кто-то другой использует систему (например, чтобы помочь вам отладить проблему), он столкнется с неожиданными результатами, которые могут иметь любое количество неприятных последствий.

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

Классическим примером этого является определение псевдонима, такого как

alias rm='rm -i'

Это звучит как отличная идея до тех пор, пока вы не введете rm в другой системе, и файлы не будут немедленно удалены, когда вы ожидаете, что будет предложено первым.

Способ обойти это примерно так:

alias rmi='rm -i'

Если вы вводите его, он работает, но если вы вводите его в другой системе, он, вероятно, не будет делать ничего, кроме выполнения команды, не найденной ошибки.

Это особенно важно среди ночи, когда что-то важное нарушено, вы не так начеку, как хотелось бы, и вы испытываете давление, чтобы исправить это сейчас . Вот когда вы действительно не хотите неожиданное поведение или вещи, которые вы должны тратить время, объясняя людям.

Аналогичным путь выполняется проверка псевдонима с помощью макроса автоключа, активированного горячей клавишей. Если вы не выходите из пути, чтобы активировать макрос, нажав горячую клавишу, то все работает так, как кто-либо ожидал. Правильно выбранная горячая клавиша, вероятно, не будет нажата случайно и, если нажать на другую систему по привычке, вероятно, не сделает ничего вредного.

-121--62518-

Можно использовать xargs для их разделения и выполнения killall для каждого:

echo $ PROCESSES _ TO _ QUIT | xargs killall -9

-121--20533-

Такое поведение обусловлено политикой безопасности современного Самбы. Исправьте ситуацию, добавив эту строку в /etc/samba/smb.conf :

acl allow execute always = True

Источник: вики Самбы .

39
27.01.2020, 19:39

Для меня это сработало, просто добавив исполняемый тег в файл.

chmod +x file.exe
2
06.12.2020, 17:33

Теги

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