我正在使用命令启动屏幕会话并为用户运行 bash 脚本。
/bin/su username -c "/usr/bin/screen -dmS test bash -c '/home/username/test.sh; exec bash'"
当我启动时,我看到该用户的屏幕会话出现,但是当我打开它时,我看到权限被拒绝错误。
我检查了该文件的权限并且它是:
-rw-rw-r-- 1 username www-data 816 Feb 18 00:59 test.sh
有人知道我为什么会看到这个错误吗?当我以用户名登录时,我可以毫无问题地运行脚本。
答案1
test.sh
不可执行。因此,您可以通过将其作为参数传递给 shell 来运行它,如bash /home/username/test.sh
,但您不能像示例命令中那样直接将其作为程序运行。运行chmod +x /home/username/test.sh
以使其可执行。
如果test.sh
正在执行诸如设置环境变量之类的操作,则它们仅在进程持续期间存在。因此,如果您运行/home/username/test.sh; exec bash
,则最终的交互式 shell 将不会拥有该进程的环境变量。要保留环境变量,请在父 bash 进程中设置它们:获取脚本,而不是将其作为单独的程序运行。
/bin/su username -c "/usr/bin/screen -dmS test bash -c '. ~/test.sh; exec bash'"