Команда Wrapper, которая запускает программу во временном каталоге и удаляет ее после выполнения

Я хочу написать команду, которая:

  1. принимает в качестве аргументов другую команду
  2. делает «cd» во временную папку
  3. выполняет команду, переданную в аргументах
  4. впоследствии удаляет временную папку

Что-то вроде этого:

run_in_temp_dir ~/bin/my_script_that_creates_lots_of_files.sh arg1 arg2 

Но было бы разумно, что такая команда уже существует. Итак, мой вопрос: существует ли такая команда?

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

4 Solutions collect form web for “Команда Wrapper, которая запускает программу во временном каталоге и удаляет ее после выполнения”

Я не думаю, что он существует среди стандартных инструментов. Причины:

Он работает только в очень специфических условиях. Например, большинство сценариев MEANT для запуска в текущем каталоге, потому что они ссылаются на локальные файлы. Даже arg1 и arg2 могут быть локальными файлами. Большинство скриптов ломают или даже наносят урон. Например, что, если сам скрипт делает rm ../* и это работает в /tmp/ ? Автоматическое удаление чего-либо – ужасная идея для стандартного инструмента.

Это то, что вам обязательно нужно написать самостоятельно для конкретного использования. На самом деле имеет смысл, что ваш скрипт делает это внутри! Если вы действительно не хотите локальную среду, вы можете использовать mktemp для создания каталога (возможно, где-то int / tmp) и помещать туда промежуточные файлы (лучше, чем cd-ing там, вы просто кладете туда файлы). Затем вы также можете удалить его потом.

Во многих системах есть команда mktemp которая принимает параметр -d , поэтому вы можете просто сделать:

 dir=$(mktemp -d) && (cd -P -- "$dir" && ~/bin/my_script_that_creates_lots_of_files.sh arg1 arg2) && rm -rf -- "$dir" 

Насколько мне известно, нет, такой команды не существует (по крайней мере: переносная команда, которая делает то, что вы хотите).

Было бы довольно тривиально реализовать это, хотя нечто похожее:

 t_dir="$(mktemp -d)" if [ $? -ne 0 ] || [ -z "${t_dir}" ] ; then printf "Unable to create temporary directory. Exiting." exit 1 else trap_tdir="rm -rf \"$t_dir\"" trap "${trap_tdir}" 0 fi (cd "${t_dir}" && run_your_script_with_args) 

Этот фрагмент (непроверенный) должен создать временный каталог и настроить его для удаления после завершения вашего скрипта (что делает ловушка).

Мы запускаем cd и команду внутри подоболочки, а это означает, что когда выйдет подоболочка, вы должны вернуться туда, где вы начали, скрипт выйдет, и ловушка начнет очищаться.

Я сомневаюсь, что есть такая команда, но писать это тривиально:

 #!/usr/bin/env bash ## create the temp directory dir=$(mktemp -d) ## save the current directory pwd="$PWD"; ## move to the temp dir cd "$dir" ## run the command given as an argument "$@" && ## remove the temp directory if the command exited successfully rm -rf "$dir" ## return to where you started from cd "$pwd" 

Не уверен, что точка этого, однако, удалит все, что создано командой, которую вы передаете, прежде чем у вас появится возможность увидеть ее. Я предполагаю, что команда, которую вы хотите запустить, внесет изменения в другое место в системе, иначе на самом деле не так много смысла.

  • Различное поведение mktemp Ubuntu 12.02 / Mint 9 Isadora
  • Как создать временный файл в сценарии оболочки?
  • Где должны быть созданы сгенерированные скрипты в файловой системе?
  • Каковы общие права для / tmp? Я unintentionnally все это рекурсивно
  • В чем разница между / tmp и / var / tmp?
  • Команда (ы) установить tempfile на CentOS 6.4
  • Рекомендуется использовать папку / tmp для резервного копирования?
  • tmp / krb5cc_ не очищается регулярно (кеширование учетных данных кебероса)
  • Перемещение папки / tmp в другое место. Проблемы с / tmp не опустошены
  • Когда монтировать / tmp (и другие временные каталоги)
  • Пользовательские временные файлы Yum (/ var / tmp / yum *) заполняются данными репо
  • Linux и Unix - лучшая ОС в мире.