명령 행에 DMG를 마운트 할 때 라이센스 계약 우회 설치를 자동화하고

꼭두각시를 사용하여 Mac 설치를 자동화하고 있습니다. 그 일부로 .dmg 형식으로 제공되는 여러 프로그램을 설치해야합니다.

다음을 사용하여 마운트합니다.

sudo /usr/bin/hdiutil mount -plist -nobrowse -readonly -quiet -mountrandom /tmp Program.dmg

문제는 일부 .dmg 파일에 라이센스가 첨부되어 있으므로 스크립트가 라이센스를 수락하는 중입니다. (꼭두각시로 실행할 때 stdin / out이 없으므로 계속 수동으로 승인 할 수 없습니다.)

라이센스를 사전 승인하거나 강제 승인하는 방법이 있습니까?



답변

GUI가 있고 두 개의 명령 행 호출을 병렬로 수행 할 수있는 경우

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter /path/to/file.dmg

osascript accept.scpt

후자는 다음 AppleScript를 실행합니다.

tell application "System Events"
    delay 5 # wait 5 seconds -- I tested it using two terminal tabs and needed the time
    key code 48 # press tab 4 times in the license window
    key code 48
    key code 48
    key code 48
    keystroke " " # press space to click "accept"
end tell

에서 bash, 나는 쓸 수 있어요

/System/Library/CoreServices/DiskImageMounter.app/Contents/MacOS/DiskImageMounter file.dmg & osascript accept.scpt

답변

EULA가 포함 된 .dmg가 발생했을 때 사용자 상호 작용없이 명령 줄을 통해 설치하려고했습니다.

/usr/bin/hdiutil convert -quiet foo.dmg -format UDTO -o bar
/usr/bin/hdiutil attach -quiet -nobrowse -noverify -noautoopen -mountpoint right_here bar.cdr

(참고 : 나는 위의 모든 옵션에 필요한 합리적 확실하지 오전 EULA 우회, 등 -nobrowse, -noverify, -noautoopen, -mountpoint그러나, 나는 그들을 사용하고 난 제 뭔가하고 싶지 않았다, 그래서 그들없이 테스트를 그렇지 않은 나는.이 테스트하지 않았습니다.)

내가 끝내었던 것은

bar.cdr
foo.dmg
right_here/

EULA를 요구하지 않고 right_here/의 내용이 포함 된 곳 foo.dmg.

완료되면 분리하십시오!

/usr/bin/hdiutil detach right_here/

자세한 정보 : hdiutil (1) Mac OS X 매뉴얼 페이지 .

YMMV


답변

“Y”만 입력하면 yes 명령을 hdiutil 명령으로 파이프하십시오.

yes | /bin/hdiutil [...]

‘y’를 누르는 것을 모방하고 명령 줄로 돌아갑니다.

다른 것을 입력하려면 명령 행에 매개 변수로 입력하십시오.

yes accept | ...

스크립트에 ‘accept’를 입력합니다.

스크립트가 입력을 여러 번 요청하면 yes 명령이 여러 항목을 입력합니다. ‘파이프 파이프’와 같은 출력이 표시 될 수 있습니다. 이는 ‘yes’가 여전히 입력을 전송하는 동안 파이프로 종료 한 명령을 의미합니다.


답변

나는 최근 EULA가있는 DMG를 발견했으며 스크립트를 작성할 수 없었기 때문에 실제로 나를 화나게했습니다. DMG를 CDR로 변환하면 CDR을 마운트 할 때 EULA를 우회했습니다.

내가 한 일은 다음과 같습니다.

hdiutil convert foo.dmg -format UDTO -o bar.cdr
hdiutil attach bar.cdr
rm foo.dmg <--optional

도움이 되었기를 바랍니다.


답변

수락해야하는 여러 페이지로 된 EULA가있는 q경우 나머지 accept 명령 앞에 a를 추가하여 accept 부분에 도달 할 수 있습니다 (필요한 것은 종료 명령이에 있기 때문에 또는 less을 사용할 ZZ수도 있음 Q).

예를 들어 EULA에 a y를 입력해야하는 경우 다음을 실행합니다.

yes qy | hdiutil attach ...

답변

꼭두각시 자체 도구를 사용하여 패키지를 설치해서는 안됩니까? 나는 radmind 관리자이고 꼭두각시에 익숙하지는 않지만 Wiki를 확인하면 달성하려는 것과 동등한 pkgdmg 도구가 있음을 알 수 있습니다.

http://projects.puppetlabs.com/projects/puppet/wiki/Puppet_Mac_Osx#packagepkgdmg