Вы могли использовать расширение команды:
vi "$(locate filename123 | head -n1)"
Сделать vim
считайте его stdin, который можно сделать vim -
, но это просто даст Вам вывод locate
которые являются путями имени файла. Это могло бы работать хотя, с помощью vim
gf
нормальная команда затем откроет путь, что курсор идет.
В случае имен файлов с пробелами в них Вы лучше из использования xargs
опция упоминается или vim
решение, описанное выше. Отметьте для создания gf
работайте необходимо добавить пространство к isfname
:
set isfname+=32
Эта подсказка и альтернативы описаны здесь.
Добавленные кавычки и head
как предложено PeterO в комментариях.
Вы не сказали, какую оболочку Вы выполняете. Это помогает. Вы просите последовательно использовать программное обеспечение, которое было создано для выполнения вещей параллельно. Короткий ответ для многих людей - то, что Вы не можете не существуют некоторые идеи, что Вы могли экспериментировать с.
Первое, и не гарантируемое последовательным, должно отправить работу пакетной очереди, использующей пакетную команду. Это очень просто.
Иначе должен записать сценарий, который позволит Вам отправлять команды в него способ, которым делает пакет.
Я предполагаю, что Вы могли записать сценарий, который работает в фоновом режиме и только позволит одному фоновому заданию кроме себя завершаться за один раз.
Из всего этого Вашего лучшего выбора пакетная команда, для именно это он был создан. Я могу адаптировать свой ответ настолько лучше, если я знаю больше о том, каков сценарий. Например, необходимо ли осмотреть результат предыдущей команды прежде, чем выполнить следующую команду в последовательности? Почему Вы не вводящий все команды в файл и петляние?
Скажите мне больше, и я могу помочь Вам больше. Коста
Принятие колотит, и Вы запускаете задания в той же оболочке, Вы можете использовать встроенное wait
команда.
wait: wait [id]
Wait for job completion and return exit status.
Waits for the process identified by ID, which may be a process ID or a
job specification, and reports its termination status. If ID is not
given, waits for all currently active child processes, and the return
status is zero. If ID is a a job specification, waits for all processes
in the job's pipeline.
Так:
sleep 60 &
wait %%; echo nextjobs; sleep 60 &
К сожалению, wait
должен быть назван от той же оболочки, которая является родителем процесса, которого Вы ожидаете. Это означает, что Вы не смогли бы ожидать в фоновом режиме. т.е. вышеупомянутые блоки в качестве примера до первого задания завершили и затем отправляют вторую работу в фон.
Если Ваш Unix реализует fuser
команда, это было бы самым легким путем:
while [ "$(fuser nohup.out 2>/dev/null)" ]; do sleep 2; done
command2
Удостоверьтесь, что Вы выполняете его в том же каталоге как command1.
Немного объяснения:
Когда Вы выполняете команду с nohup
, файл называют nohup.out
создается для хранения обоих из стандартного вывода команды и ошибки.
Команда, которую я предложил, контролирует это nohup.out
файл, чтобы видеть, открыто ли это все еще. Если это так, это означает первый процесс, command1
, все еще работает. В этом случае, while
цикл ожидает в течение двух секунд, и попробовать еще раз. Когда command1
концы, nohup.out
файл больше не используется, и цикл оставляют, позволяя command2
быть выполненным. Обратите внимание, что это не будет работать, если другой процесс, окажется, будет использовать nohup.out
впоследствии, как кто-то выполнение tail -f nohup.out
.
Править: Если Вы ОС не обеспечиваете fuser
, вот портативный путь:
1: определите идентификатор процесса фонового процесса. Если Вы просто работали nohup
команда, можно просто получить его с этой командой, если введено сразу после nohup:
pid=$!
Иначе используйте один из:
pgrep command1
ps -eo pid,comm| grep -w [c]ommand1
top
или безотносительно похожего метода и набора pid
переменная соответственно.
Однажды Вы Вы сделаны, выполните эту команду:
while kill -0 $pid; do sleep 2; done
command2
Это будет ожидать command1
завершаться перед запуском command2
.
jobs
, так можем мы просто контроль jobs
очередь? Это - то, если все предыдущее задание сделано, то выполненная новая команда. Я не знаю, выполнимо ли или нет, и как достигнуть его.
– user15964
17.11.2013, 03:56
fuser
, Я обновляю свой ответ с решением, которое должно работать с любым Unix как ОС.
– jlliagre
17.11.2013, 11:22
nohup sh -c 'command1; command2' &
работал бы. 2. Это не помогает здесь: command1
уже запустился.
– Gilles 'SO- stop being evil'
17.11.2013, 22:06
qsub -I
Я могу непосредственно войти в систему один из узла. Затем я могу выполнить команду на том узле. Я использую mathematica программное обеспечение и использованиеnohup math -run "<<file.m" &
запускать программу. Так как я могу взаимодействовать с узлом, таким образом, я не отправлю все команды в единственное время с помощью файла сценария. Я могу выполнить команду в любое время, если я желаю. Таким образом, здесь прибывает проблема, я хочу свою фоновую программу, выполненную один за другим. Поскольку каждый прогон программы в параллельном режиме. Я не хочу их борющийся за ЦП и Память. Я не знаю, ясно выразился ли я? спасибо – user15964 16.11.2013, 18:00