我正在尝试使用bash脚本自动化仓库的克隆并构建其代码。我认为脚本中的一些命令需要使用sudo
运行。为了实现这一点,我决定使用sudo
运行整个脚本,但使用this thread中讨论的方法删除不需要的命令的root权限。
下面是我的脚本的样子(实际的脚本更长,但这是失败的部分):
#!/bin/bash
if ! [ $(id -u) = 0 ]; then
echo "The script needs to be run as root." >&2
exit 1
fi
if [ $SUDO_USER ]; then
real_user=$SUDO_USER
else
real_user=$(whoami)
fi
# Install the Micro-XRCE-DDS-Agent
sudo -su $real_user git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git /home/$real_user/Repos/Micro-XRCE-DDS-Agent
sudo -su $real_user mkdir /home/$real_user/Repos/Micro-XRCE-DDS-Agent/build
sudo -su $real_user cd /home/$real_user/Repos/Micro-XRCE-DDS-Agent/build
sudo -su $real_user cmake ..
sudo -su $real_user make
make install
ldconfig /usr/local/lib/
sudo -su $real_user cd
字符串
与the resource quoted above中的声明相比,我将sudo -u $real_user
命令更改为sudo -su $real_user
,否则会得到错误sudo: cd: command not found
。
我这样运行脚本:
chmod u+x setup.sh
sudo bash setup.sh
型
然而,当我运行脚本时,我遇到了这个错误:
CMake Error: The source directory "/home" does not appear to contain CMakeLists.txt.
型cmake ..
命令似乎没有在/home/$real_user/Repos/Micro-XRCE-DDS-Agent/build
中运行,而是在/home
中运行。
我的主要问题是:为什么cmake ..
前面的cd
命令无效?
我也试过用pushd
和popd
更改工作目录,但也没有成功。
任何提示或建议将不胜感激!
1条答案
按热度按时间4xrmg8kj1#
只是建议,你为什么不做这样的东西?
字符串
这样,如果你只是以sudo的形式运行脚本,它应该可以工作,你只需要在脚本中使用sudo,并在需要特权的行中使用。