У меня проблема с копированием файлов в bash из подкаталогов в родительские каталоги - PullRequest
0 голосов
/ 04 мая 2020

Привет всем

У меня есть bash скрипт для установки моего приложения на основе bash (это всего лишь bash скрипты, которые я обернул, чтобы работать как приложение с Platypus .

У меня есть приложения, которые мне нужно скопировать в родительский каталог в папке ресурсов «установки приложения».

Это выглядит примерно так:

AFolderWhereItGotDownloaded/
   Install.app/
      Contents/
         MacOS/
         Info.plist
         Resources/
            Application1.app/ <-- This is the application that I want to move to "AFolderItGotDownloaded"
            Application2.app/ <-- This is the application that I want to move to "AFolderItGotDownloaded"
            AppSettings.plist
            AppIcon.icns
            MainMenu.nib
            script <-- This is the script that runs when I double click the app

Единственное, что я хочу сделать, это cp -r или rsync -r два приложения для AFolderWhereItGotDownloaded/

Что я сделал до сих пор:

#!/bin/bash

#The directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &>/dev/null 2>&1 && pwd )"

#The "parent" directory
PARENTDIR="../../.."

cp -r "${DIR}/Application1.app" "${PARENTDIR}/Application1.app"
cp -r "${DIR}/Application2.app" "${PARENTDIR}/Application2.app"

Что я получаю:

cp: ../../../Application1.app: Permission denied
cp: ~/Downloads/AFolderWhereItGotDownloaded/Install.app/Contents/Resources/Application1.app: unable to copy extended attributes to ../../../Application1.app: Permission denied

С rsyn c

#!/bin/bash

#The directory of the script
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" &>/dev/null 2>&1 && pwd )"

#The "parent" directory
PARENTDIR="../../.."

rsync -r "${DIR}/Application1.app" "${PARENTDIR}/Application1.app"
rsync -r "${DIR}/Application2.app" "${PARENTDIR}/Application2.app"

Что я получу:

rsync: mkdir "~/../../../Application1.app" failed: Permission denied (13)
rsync error: error in file IO (code 11) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/main.c(545) [receiver=2.6.9]
rsync: connection unexpectedly closed (8 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at /BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-52.200.1/rsync/io.c(453) [sender=2.6.9]

Если кто-то знает, что происходит, было бы неплохо ...

OS: macOS Mojave (10.14.6)

В окне информации о файле указано, что у меня есть права на чтение и запись папок.

Результаты ls -l

Inside AFolderWhereItGotDownloaded

total 16
drwxr-xr-x@ 3 <myusername>  staff    96  4 mai 00:13 Install.app
-rwxr-xr-x@ 1 <myusername>  staff  1069 28 avr 13:20 LICENSE.txt
-rwxr-xr-x@ 1 <myusername>  staff  2586  3 mai 15:05 README.md

Внутри Install.app

total 0
drwxr-xr-x@ 5 <myusername>  staff  160  4 mai 00:13 Contents

Внутреннее содержимое

total 8
-rwxr-xr-x@  1 <myusername>  staff  632  3 mai 14:56 Info.plist
drwxr-xr-x@  3 <myusername>  staff   96  4 mai 00:13 MacOS
drwxrwxrwx@ 17 <myusername>  staff  544  4 mai 13:43 Resources

Внутренние ресурсы

total 728 (I have other apps too but to keep it clean I only stated two "Applications" here)
-rwxrwxrwx@ 1 <myusername>  staff  313202  3 mai 14:54 AppIcon.icns
-rwxrwxrwx@ 1 <myusername>  staff     499  3 mai 14:56 AppSettings.plist
drwxrwxrwx@ 3 <myusername>  staff      96  4 mai 00:13 Application1.app
drwxrwxrwx@ 3 <myusername>  staff      96  4 mai 00:13 Application2.app
-rwxrwxrwx@ 1 <myusername>  staff   42236  3 mai 14:56 MainMenu.nib
-rwxrwxrwx@ 1 <myusername>  staff     940  4 mai 14:29 script

1 Ответ

1 голос
/ 05 мая 2020

PARENTDIR="../../.." неверно. Если вы выполните cd ~; pwd, он покажет что-то вроде /home/user. Поскольку это два глубоких, вы должны использовать PARENTDIR="../.." вместо.

Кроме того, вы должны иметь root -подобные привилегии (root, sudo) для создания файлов в каталоге root. Вместо этого лучше использовать программное обеспечение в /opt и добавить его в переменную PATH пользователей, например, export PATH=$PATH:/opt/myapp/bin/. Для /opt вам также необходимы root -подобные привилегии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...