найдите - исполнительный выход 1 \; не работает ни один действительно не находит - должностное лицо sh-c выходит 1 \;

Можно присоединить к выполнению tmux сессию и породить новое окно, которое выполняет конкретную команду:

tmux attach \; new-window vim

Обратите внимание, что это не порождает энергию в окне предэкс-расположения - нет никакого средства для того, чтобы сделать это, это действительно не имеет смысла: как @Falcon Momot указывает, существующее окно могло выполнять что-либо, единственный способ дать команды, "отправляют ключи".

3
24.09.2016, 04:01
4 ответа
  • Вам не нужно [118307] искать [118308], если вы уже знаете точное имя файла, отчество и условия, при которых файл должен быть найден приемлемым. Поэтому другая проблема - выход вашего скрипта из вашего утверждения [118309]-exec[118310] - может быть не та, которую вы считаете проблемой. [118311] find[118312] не собирает опцию для [118313] kill[118314] в своей родительской оболочке, потому что оболочка уже предоставляет ее.

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

    1. И это открывает вам множество других возможностей:
    2. EDIT:

    Я только что подумал о других опциях, включающих расширение параметров [118317]для выхода из оболочки без [118319]нахождения [118320] [118321]-exec[118322] во всем, что может быть использовано другими способами:

    или

    enter image description here enter image description here enter image description here

    оба этих параметра вызовут выход только в том случае, если переменная, которой Вы присваиваете [118323] найдет [118324] [118325]stdout[118326] не является ни [118327]null[118328], ни не установлена. И, конечно же, если Вы хотите ошибиться на основании пустой находки, Вы можете сделать то же самое с [118329]:-[118330] вместо [118331]:+[118332] и полностью опустить переменную [118333]$N[118334]ull значения.

    Или просто чтобы изменить состояние выхода [118335] найдите:

  • 3
    27.01.2020, 21:10
    [117952] Можно проверить, вернул ли он результат:

    4
    27.01.2020, 21:10
    [117948]Вы можете просто сделать это:

    Это работает, даже если вы используете набор [118279]-o errexit[118280] (который вы должны).[117951].

    1
    27.01.2020, 21:10
    [12163] find[118640] является собственной программой. Аргумент к [118641]-exec[118642] - это другая команда. Когда команда типа [118643]find ... -exec foo {} \;[118644] выполняется, оболочка имеет в качестве подпроцесса [118645]find[118646], а каждый экземпляр [118647]foo[118648] является подпроцессом [118649]find[118650]. Команда [118651]exit[118652] существует только как сборка оболочки, а не как независимая команда; программа [118653]exit[118654] была бы невозможна, так как ей пришлось бы делать выход из родительского процесса.[12164] Таким образом, решение вашей непосредственной проблемы состоит в том, чтобы заставить [118655]find[118656] сообщить, нашёл ли он файл или нет, и заставить оболочку выйти, если есть совпадение. Вы не можете использовать статус возврата [118657]find[118658], так как он считает отсутствие какого-либо совпадения причиной успеха. Вместо этого проверьте вывод.[12165]Здесь файл должен быть обычным файлом, если он вообще существует. Однако, в общем случае, файл может быть каталогом, и в этом случае [118659]find[118660] будет его пересекать. Поэтому скажите [118661] найти[118662], чтобы он остановился, когда найдет совпадение.[12166] Однако, полученный скрипт не является надежным. Вы неправильно реализуете блокировку. Если два экземпляра скрипта запускаются почти в одно и то же время, то можно иметь, например:[12167]Script 1 запускается, не видит файла [118813]restarting_server[118814], и начинает работать весело.[12168]Script 2 запускается, не видит файла [118815]restarting_server[118816], и начинает работать весело. [12169]Сценарий 1 видит, что сервер не работает, и решает перезапустить его.[12170]Сценарий 2 видит, что сервер не работает, и решает перезапустить его.[12171]Сценарий 1 создает [118817]/tmp/restarting_server[118818]. [12172]Сценарий 2 обновляет метку времени на [118819]/tmp/restarting_server[118820].[12173]Сценарий 1 вызывает [118821] перезагрузку сервера службы [118822].[12174]Сценарий 2 вызывает [118823] перезагрузку сервера службы [118824].[12175]Сценарий 1 удаляет [118825]/tmp/restarting_server[118826]. [12176]Сценарий 2 вызывает [118827]rm -f /tmp/restarting_server[118828], который ничего не делает.[12177]Вызов [12178]flock[12179] для реализации правильной блокировки.[12180]Для аннулирования блокировки при перезагрузке не требуется таймаут, так как блокировка удерживается в памяти.[118208].
    2
    27.01.2020, 21:10

    Теги

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