0

I have to copy a file to a path with spaces in a bash script:

#!/bin/bash -ex

uuid=$(/usr/libexec/PlistBuddy -c 'Print :UUID' /dev/stdin <<< $(security cms -D -i ${1}))

echo "Found UUID $uuid"

output="~/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"

# this works
cp -v $1 ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision

# this does not work
cp -v $1 "$output"

the output:

+ cp -v build-assets/Company_Enterprise_Wildcard.mobileprovision '/Users/mles/Library/MobileDevice/Provisioning Profiles/ae8201ff-07e3-460c-a0ec-231e3e7b55c5.mobileprovision'
build-assets/Company_Enterprise_Wildcard.mobileprovision -> /Users/mles/Library/MobileDevice/Provisioning Profiles/ae8201ff-07e3-460c-a0ec-231e3e7b55c5.mobileprovision
+ cp -v build-assets/Company_Enterprise_Wildcard.mobileprovision '~/Library/MobileDevice/Provisioning Profiles/ae8201ff-07e3-460c-a0ec-231e3e7b55c5.mobileprovision'
cp: ~/Library/MobileDevice/Provisioning Profiles/ae8201ff-07e3-460c-a0ec-231e3e7b55c5.mobileprovision: No such file or directory

I'm on a Mac. The ~, which is an alias to /Users/mles does not get resolved. I've found a workaround by using

output="/Users/${USER}/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"

but I would rather use ~. How can I resolve the ~ alias in my output variable?

mles
  • 3,851
  • 8
  • 41
  • 83
  • 1
    `~` is not expanded inside the quotes. Use it as `output=~"/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision"` – anubhava May 19 '17 at 14:52
  • Or use `"$HOME"` instead. – Benjamin W. May 19 '17 at 14:53
  • Also, on the right hand side of an assignment, there is no word splitting and filename expansion, so unless you have blanks, you don't need to quote – see [manual ("Simple Command Expansion")](https://www.gnu.org/software/bash/manual/bashref.html#Simple-Command-Expansion). – Benjamin W. May 19 '17 at 14:57

0 Answers0