Как можно запустить скомпилированную программу на java или c из shell-файла, находящегося за пределами его каталога?

rsync нуждается в опции update, чтобы избежать передачи всех файлов, man rsync предоставит вам страницу руководства и в разделе опций вы найдете,

 -u, --update пропускать файлы, которые являются более новыми на приемнике
 -inplace обновлять файлы назначения на месте

Чтобы помочь понять, что он делает, вы можете использовать опцию -v для режима verbose.

-v, --verbose Эта опция увеличивает количество информации, предоставляемой вам во время передачи данных. По умолчанию rsync работает без звука. Однократное использование опции -v даст вам информацию о том, какие файлы передаются, и краткое резюме в в конце. Два параметра -v дадут вам информацию о том, какие файлы будут и немного больше информации в конце. Более двух опций -v следует использовать только при отладке rsync.

 Обратите внимание, что имена передаваемых файлов выводятся с использованием
 по умолчанию --out-format "%n%L", который сообщает вам только имя файла
 и, если элемент является ссылкой, куда он указывает. На уровне единственного параметра -v
 это не упоминает, когда у файла изменяются атрибуты.
 Если вы попросите предоставить детализированный список измененных атрибутов (либо --item-
 ize-changes или добавив "%i" к параметру --out-format), вывод (на
 клиента) увеличивается, чтобы упомянуть все элементы, которые были изменены каким-либо образом. См.
 опцию --out-format для более подробной информации.
-1
23.01.2019, 18:32
2 ответа

Сценарий запустит команду ./a.outв текущем рабочем каталоге, так как это записано в сценарии; если вы запускаете скрипт из другого места, ваш двоичный файл находится не в текущем рабочем каталоге, что приводит к тому, что оболочка выдает ошибку, которую вы видите.

Если вы хотите использовать скрипт для вызова двоичного файла независимо от каталога, из которого он вызывается, у вас есть как минимум четыре варианта:

  • Поместите a.outв каталог, который уже находится в вашем PATH, и перестаньте указывать текущий рабочий каталог в качестве местоположенияa.out(e. г. переместите a.outв $HOME/bin/a.outи измените сценарий, чтобы он просто запускал a.out, а не./a.out).
  • Пусть сценарий явно вызывает полный путь к двоичному файлу (e. г. вместо ./a.out, вместо/path/to/the/location/of/a.out)
  • Сценарий должен добавить в своеPATHместоположение сценария и не указывать текущий каталог в качестве местоположения двоичного файла (e. г.PATH="$PATH:/path/to/the/binary"; a.out
  • Сценарий должен установить рабочий каталог в местонахождение сценария, прежде чем пытаться его запустить (e. г.cd /path/to/the/binary;./a.out)
2
28.01.2020, 05:08

./script.sh предполагает, что вы запускаете его в том же каталоге.

Скажем, a.outнаходится в /var/run/a.out, вы можете изменить tempstart.sh, чтобы он содержал этот полный путь к файлу.

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

0
28.01.2020, 05:08

Теги

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