Если путем "планирования" Вас означают, как разработка идет теперь, она похожа на это:
3.7 выпущен (и стабильная толпа запускает их строку 3.7.1, 3.7.2...), Linux открывает "merge window", приблизительно 2 недели, в течение которых он примет новые возможности (которые обычно готовили elsewehere). То, когда окно слияния закрывается, Linus выпускает 3.8-rc0 (предвыпускная версия № 0), после которого только исправления ошибок, как предполагается, входят в ядро (иногда функция, которая была объединена, забрано). Каждый на следующей неделе (приблизительно) выпуски-rc1,-rc2 Linus... пока он не удовлетворен, что больше нет ошибок (обычно вокруг-rc6), и 3.8, рождается. Затем цикл запускается снова. В то время как все это продолжается, толпа разработчика занята, взламывая на изменениях, которые будут предложены для будущих окон слияния (некоторые функции работались на буквально в течение многих лет прежде чем быть считавшим приемлемого для включения).
Вот концептуальный подход, который может работать.
Команда 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
Такое поведение обусловлено политикой безопасности современного Самбы. Исправьте ситуацию, добавив эту строку в /etc/samba/smb.conf
:
acl allow execute always = True
Источник: вики Самбы .
Для меня это сработало, просто добавив исполняемый тег в файл.
chmod +x file.exe