I'm working on a Linux Bash script that needs to start as root. At the end of the script, it builds a list of packages. This requires running as user. Then it will move the packages, which needs to run as root again. I have sudo set up, but want to keep the script as generic as possible.I've tried the following and slight variations of it in the first script to switch from root to user. su -c - $USER export PKGDEST=/tmp/test/AUR/ su -c - $USER pacaur --noconfirm --noedit -cm $(< /tmp/test/aur)The second line fails to run properly resulting in different errors, depending quote combination and placement. Running the lines within the first script as shown above produced the following error after reading the file /tmp/test/aur :: no targets specified (use -h for help). My preference would be getting this single script method to work properly.Google, etc. said root, user, root in bash is bad, so tried break it into 3 parts:The first script runs as root. The problem centers here, can't getit to start the second.Second script runs as user, starts 3rd script as root with: sudo/bin/bash $L/copyaur.shThird script, copyaur.sh runs, moving the packages properly butdoesn't show as running in the terminal because calls new shell?Below was ran as su in a user terminal during testing. Prefer using the $USER var in the script.As su in the terminal, then back to su - $USER, then  ls in home lists my normal user name [dom's] contents. [dom@arch testing]$ echo $USERdom[root@arch testing]# echo $USERdom[root@arch testing]# pwd/home/dom/scripts/testingI get the following results in testing, starting as su in the terminal. Want to get $USER var to work in place of dom.su -       $USER  home/$USER/scripts/testing/buildaur.sh  - No such file or directorysu --login $USER  home/$USER/scripts/testing/buildaur.sh  - No such file or directorysu -       $USER  home/dom/scripts/testing/buildaur.sh    - No such file or directorysu -      $USER home/dom/scripts/testing/buildaur.sh    - No such file or directorysu -      $USER                        ./buildaur.sh    - No such file or directorysu -       dom                           ./buildaur.sh    - No such file or directorysu -       dom  ~/scripts/testing/buildaur.sh              - Permission deniedsu -      $USER ~/scripts/testing/buildaur.sh              - Permission deniedsu --login dom  ~/scripts/testing/buildaur.sh              - Permission deniedsu -       dom   /home/dom/scripts/testing/buildaur.sh     - Runs as user, expectedsu --login dom   /home/dom/scripts/testing/buildaur.sh     - Runs as user, expectedsu -       dom   /home/$USER/scripts/testing/buildaur.sh   - Runs as user, expected9/19/2014 EDIT TO ADD REQUESTED INFO Here's part of the script. Still no solution. This latest variation has made it through building the first package from the list before failing. It does however complete the next line, which is the last command in the script. Keep in mind this command works fine outside of using it with the proceeding su -c - $USER pacaur --noconfirm --noedit -cm $(< /tmp/makeiso/aur)#!/bin/bash     ##  makeiso.sh must be run as root within /home/$USER/makeiso/releng##  makeiso dependancies: archiso pacaur############################################################################## Accessing an empty variable will yield an error    set -u# Check if root# Print message to user    echo Checking if we're running as root    if [[ $EUID -ne 0 ]]; then        echo This script must be run as root 1>&2        exit 1    fi# echo for a space     echo # If passed root test, send message print message to user    if [[ $EUID = 0 ]]; then        echo Passed root test, proceeding        fi####################################################################################################Line 180 of the script running as root.......################################################### Print message to user    echo Copying system configuration files    set -x# Create directory for following commandmkdir -p /tmp/makeiso/# Create a list of modified config files    pacman -Qii | awk '/^MODIFIED/ {print $2}' >> /tmp/makeiso/rtmodconfig.list# Create destination directory for the following command    mkdir -p $L/airootfs/makeiso/configs/rootconfigs# Copy above list to releng for later use    cp /tmp/makeiso/rtmodconfig.list $L/airootfs/makeiso/configs/rootconfigs/rtmodconfig.list# Read rtmodconfig.list and copy the modified config files to releng    xargs -a /tmp/makeiso/rtmodconfig.list cp -t $L/airootfs/makeiso/configs/rootconfigs/# Set makepkg variable to define where to send built packages     su -c - $USER export PKGDEST=/tmp/makeiso/AUR # Build AUR packages from list, /tmp/makepkg/aur#############    su -c - $USER pacaur --noconfirm --noedit -cm $(< /tmp/makeiso/aur)############## Copy the prebuilt AUR packages to releng    cp -R /tmp/makeiso/AUR $L/airootfs/makeiso/packages/AURHere's the output with set -x. I'm using pacaur to build the packages, which uses cower and makepkg. It seems like either pacaur or makepkg is loosing track of the file with the list of packages to build, and doesn't recognize the package names as commands. + su -c - dom 'export PKGDEST=/tmp/makeiso/AUR'+ su -c - dom 'pacaur --noconfirm --noedit -cm bootinfoscriptcairo-ubuntucowerfontconfig-ubuntufreetype2-ubuntugnome-colors-icon-themegnome-colors-icon-theme-extrasgnome-icon-theme-xfcegoogle-chromegrub-legacylibxfcegui4pacaurpackage-querypkgbrowserttf-ms-fontsvirtualbox-ext-oraclevivaldixfce4-quicklauncher-plugin':: resolving dependencies...:: looking for inter-conflicts...AUR Packages  (1): bootinfoscript-0.61-1  :: Retrieving package(s)...sudo: no tty present and no askpass program specified:: Checking bootinfoscript integrity...==> Making package: bootinfoscript 0.61-1 (Sat Sep 19 22:27:37 PDT 2015)==> Retrieving sources...  -> Found bootinfoscript-061.tar.gz==> Validating source files with md5sums...    bootinfoscript-061.tar.gz ... Passed:: Building bootinfoscript package(s)...==> Making package: bootinfoscript 0.61-1 (Sat Sep 19 22:27:38 PDT 2015)==> Checking runtime dependencies...==> Checking buildtime dependencies...==> Retrieving sources...  -> Found bootinfoscript-061.tar.gz==> Validating source files with md5sums...    bootinfoscript-061.tar.gz ... Passed==> Extracting sources...  -> Extracting bootinfoscript-061.tar.gz with bsdtar==> Removing existing $pkgdir/ directory...==> Entering fakeroot environment...==> Starting package()...==> Tidying install...  -> Purging unwanted files...  -> Removing libtool files...  -> Removing static library files...  -> Compressing man and info pages...  -> Stripping unneeded symbols from binaries and libraries...==> Creating package bootinfoscript...  -> Generating .PKGINFO file...  -> Generating .MTREE file...  -> Compressing package...==> Leaving fakeroot environment.==> Finished making: bootinfoscript 0.61-1 (Sat Sep 19 22:27:38 PDT 2015):: bootinfoscript cleaning skippedbash: line 1: cairo-ubuntu: command not founderror: no operation specified (use -h for help)bash: line 3: fontconfig-ubuntu: command not foundbash: line 4: freetype2-ubuntu: command not foundbash: line 5: gnome-colors-icon-theme: command not foundbash: line 6: gnome-colors-icon-theme-extras: command not foundbash: line 7: gnome-icon-theme-xfce: command not foundbash: line 8: google-chrome: command not foundbash: line 9: grub-legacy: command not foundbash: line 10: libxfcegui4: command not founderror: no operation specified (use -h for help)bash: line 14: ttf-ms-fonts: command not foundbash: line 15: virtualbox-ext-oracle: command not foundbash: line 16: vivaldi: command not foundbash: line 17: xfce4-quicklauncher-plugin: command not found+ cp -R /tmp/makeiso/AUR /home/dom/makeiso/releng/airootfs/makeiso/packages/AUR
Bash root to user. Best in same or separate script?
bash;shell script;root;not root user