【问题标题】:Bash need root to user. In same script or separate script?Bash需要root用户。在同一个脚本或单独的脚本中?
【发布时间】:2015-12-12 20:58:11
【问题描述】:

在这里为 newb 编写脚本,处理需要 root、用户、root 的 bash 脚本。我在用户终端中 su 之后运行它。最初尝试:

su -c - "$USER" "export PKGDEST=/tmp/test/AUR/" 
su -c - "$USER" "pacaur --noconfirm --noedit -cm" "$(< /tmp/test/aur)"

无论如何,不​​同的错误,取决于报价组合,位置,都会导致第二行崩溃。运行上述代码,第二行在读取文件 /tmp/test/aur :: no targets specified (use -h for help) 后产生以下错误。

pacaur --noconfirm --noedit -cm "$(< /tmp/test/aur)"

以用户身份启动脚本时运行良好。我的第一选择是让这种方法正常工作。

Google 等说 bash 中的 root、用户、root 不好,所以试着把它分成 3 个部分:

1) 第一个脚本以 root 身份运行。问题中心在这里,不能让它开始第二个。

2) 第二个脚本以用户身份运行,以 root 身份启动第三个脚本:sudo /bin/bash "$L"/copyaur.sh

3) 第三个脚本,copyaur.sh 启动、运行、移动一些包,但由于调用了新的 shell,所以没有显示在终端中。

在测试期间,以下内容在用户终端中以 su 身份运行。更喜欢使用 $USER var 作为 whoami 报告 root 而 echo $USER 报告用户名。切换su后,然后su - $USER, ls in~显示我家的内容。

[dom@arch testing]$ echo $USER

dom
[root@arch testing]# echo $USER

dom
[root@arch testing]# pwd
/home/dom/scripts/testing


su -       $USER  home/$USER/scripts/testing/buildaur.sh  - No such file or directory
su --login $USER  home/$USER/scripts/testing/buildaur.sh  - No such file or directory
su -       $USER  home/dom/scripts/testing/buildaur.sh    - No such file or directory
su -      "$USER" home/dom/scripts/testing/buildaur.sh    - No such file or directory
su -      "$USER"                        ./buildaur.sh    - No such file or directory
su -       dom                           ./buildaur.sh    - No such file or directory

su -       dom  ~/scripts/testing/buildaur.sh              - Permission denied
su -      $USER ~/scripts/testing/buildaur.sh              - Permission denied
su --login dom  ~/scripts/testing/buildaur.sh              - Permission denied

su -       dom   /home/dom/scripts/testing/buildaur.sh     - Runs as user, expected
su --login dom   /home/dom/scripts/testing/buildaur.sh     - Runs as user, expected
su -       dom   /home/$USER/scripts/testing/buildaur.sh   - Runs as user, expected

【问题讨论】:

    标签: linux bash shell


    【解决方案1】:

    /tmp/test/AUR/tmp/test/aur 是不同的文件。大多数文件系统都区分大小写。

    【讨论】:

    • "export PKGDEST=/tmp/test/AUR" 为 makepkg 设置变量,用于在构建后放置包的位置,AUR 是一个目录 "$(&lt; /tmp/test/aur)" 告诉 pacaur 读取 /tmp/test/aur,aur 是一个文件。跨度>
    • 谢谢 Emil,现在我明白你为什么得出这个结论了。我编辑了操作以将“读取/tmp/test/aur的内容后”替换为“读取文件后”/tmp/test/aur
    • @Dom,设置变量时也可以更清楚。例如,PKGDEST=/tmp/test/AUR/ 表明这是一个目录。像${PKGDEST}/${FILENAME} 这样的最终用法不是问题,因为无论如何双斜杠都被视为单斜杠。
    • 感谢您提供的信息 ghoti。我一直想知道这一点。它是一个标准还是和或它是老L和U nix人如何做到的?编辑操作以反映这一点。将/tmp/test/AUR 更改为/tmp/test/AUR/
    • “大多数文件系统”——不太确定。桌面系统上的大多数文件系统都在 Windows 和 OS X 下,默认情况下它们都不区分大小写。在服务器上,情况有所不同。
    猜你喜欢
    • 2014-12-24
    • 2011-06-14
    • 2016-11-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 1970-01-01
    • 2020-08-31
    • 2018-11-12
    相关资源
    最近更新 更多