diff --git a/com.oracle.truffle.r.test.packages/r/install.package.R b/com.oracle.truffle.r.test.packages/r/install.package.R
index 70e6958084013258ecd495d18eeca3aa7c80d827..5a537407b2308e5592aef7a9f82c53b3f1e5e1e7 100644
--- a/com.oracle.truffle.r.test.packages/r/install.package.R
+++ b/com.oracle.truffle.r.test.packages/r/install.package.R
@@ -39,10 +39,20 @@ parse.args <- function() {
 }
 
 run <- function() {
-	parse.args()
-	install.packages(pkgname, contriburl=contriburl, type="source", lib=lib.install, INSTALL_opts="--install-tests")
+    parse.args()
+    tryCatch({
+        res <- install.packages(pkgname, contriburl=contriburl, type="source", lib=lib.install, INSTALL_opts="--install-tests")
+        if (res == NULL) 0L else 1L
+    }, error = function(e) {
+        cat(e$message, "\n")
+        return (1L)
+    }, warning = function(e) {
+        cat(e$message, "\n")
+        return (1L)
+    })
 }
 
 if (!interactive()) {
-	run()
+	status.code <- run()
+    quit(status = status.code)
 }