echo "$targetdir" | xargs -0 sh -c 'cf $1' sh
Вы должны вызвать bash
вместо sh
.Экспорт функций является функцией bash.
$ foo() { echo bar; }
$ export -f foo
$ sh -c 'foo'
sh: 1: foo: not found
$ bash -c 'foo'
bar
Кроме того, избавьтесь от опции -0
, поскольку вход не разделен NUL.Вместо этого используйте -d'\n'
.И процитируйте "$1"
для надежности.
echo "$targetdir" | xargs -d'\n' bash -c 'cf "$1"' bash
На самом деле, вы можете использовать -0
, если измените формат ввода.
printf '%s\0' "$targetdir" | xargs -0 bash -c 'cf "$1"' bash
Для чего это стоит, mktemp создает случайные временные файлы и делает это безопасно.Он проверяет, что файл еще не существует, а затем создает его, чтобы никто другой не мог перехватить имя за доли секунды между генерируемым именем и его возвращением вызывающей стороне.