Как вы заметили в своем вопросе, эта подстановка:
`cat $CHECK/samplefile | grep "string"`
была выполнена на вашей локальной машине. Вы можете легко исправить это следующим образом:
ssh -n test@192.168.1.2 \
"until { cat ""$CHECK""/samplefile | grep ""string""; }; do \
touch ""$CHECK""/success; \
done"
Как вы видите, вам не нужна никакая подстановка, кроме разрешения переменной $CHECK
. Вы можете поместить условные инструкции в список {...}
, и теперь код выхода списка будет решающим для инструкции until
.
Во-первых, обратите внимание, что выполнение zip
- $ (which zip)
аналогично его выполнению как просто zip
. Утилита и
находит программный файл на пути пользователя.
При наличии Zip-архива zip
добавит новых файлов, заменит существующих файлов, но не удалит файлов в архив, если эти файлы были удалены из файловой системы.
Чтобы удалить файл из Zip-архива:
$ zip -d archive.zip filename
Очевидно, вы также можете просто удалить архив с помощью rm
перед его повторным созданием.
Для вашего сценария NodeJS вы можете использовать
rm -f ../data.zip && zip -r ../data.zip .
Флаг -f
для rm
заставляет rm
не сбой, если архив не существует.
Как указано в записи справки команды zip
:
Действие по умолчанию - добавить или заменить записи zip-файла из списка
Это объясняет, почему поведение по умолчанию не работает вовлекает удаление файлов в zip-файле, и причина, по которой huge.pdf
остается в нем.
Если вы хотите полностью переопределить существующий архив, вы можете создать новый временный zip-файл, а затем заменить предыдущий. Кроме того, вызов команды which
не является необходимым, поэтому команда должна быть следующей:
zip -r temp.zip . ; mv temp.zip ../data.zip