我有一个非常简单的 bash 脚本,它在 root 用户下运行了 5 个命令。如果我一一手动运行命令,一切正常 - 没问题。但是当我通过命令将它作为 my-deploy.sh 文件运行时
bash /root/custom-scripts/deploy/my-deploy.sh 2>> /var/log/www-deploy/tatrytec.eu.log
这似乎是一个无穷无尽的过程。这是脚本:
#!/bin/bash
# Run this script as bash command like: bash create-apache-site.sh
cd /var/www/html/tatrytec.eu
git pull
# Change user bacause of composer install warrning
su vlado
composer install --no-scripts
npm install --production
它开始运行,我可以在终端中看到 git pull 的结果。但随后它没有任何错误就死了,它仍在运行。我可以通过 ctrl+Y 停止它。我觉得那个用户有问题,但正如我之前写的那样,如果我一个接一个地运行命令,它就可以工作。我不明白。有人可以告诉我可能是什么问题吗?谢谢。
除非以 root 身份运行,否则su vlado
将需要密码。su vlado
将等待输入su valdo
不在内部执行su
,而是在退出之后执行su valdo
发生什么事
su vlado
它将派生一个新的shell,它将忽略(原样)原始bash脚本中的以下行。我尝试更详细地解释哪个用户/发生了什么
建议更正
作为根
在哪里
su vlado << EOF
...EOF
将所有行提供给su vlado
改用这个:
或选项允许您运行命令
-c
。--command
su
估计
su vlado
需要输入密码。您可以使用 sudo 并通过修改 /etc/sudoers 使其不需要特定命令的密码
您似乎想以用户 vlado 的身份运行脚本中的最后几行。有一种干净的方法可以做到这一点:
所以脚本的最后几行将如下所示: