【问题标题】:Running shell script in rails only outputs the 1 line在 rails 中运行 shell 脚本只输出 1 行
【发布时间】:2023-04-07 08:13:01
【问题描述】:

我正在尝试让 Rails 控制器从存储桶上的存储库中提取最新内容。在大多数情况下,这是成功的,我在测试时遇到的唯一问题我似乎只能让页面输出脚本返回的第一行,并且似乎没有运行脚本的其余部分任何想法

这是我的 bash 脚本

#!/bin/bash -l
GIT_REPO='IMAREPO'
TMP_GIT_CLONE=TEMPPATH
PUBLIC_WWW=SITEPATH

if [ -d $TMP_GIT_CLONE ]; then
   rm -Rf $TMP_GIT_CLONE
fi
git clone $GIT_REPO $TMP_GIT_CLONE
jekyll build --source $TMP_GIT_CLONE --destination $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit

在我正在做的 Rails 控制器中

@result = %x[/var/srv/pulldevelopment.sh]

这又只从脚本中输出一行

正在克隆到 '/root/tmp/git/blah'...

【问题讨论】:

  • 该脚本中是否有任何输出到 stderr 而不是 stdout 的内容?也许你需要类似%x[script.sh 2>&1]
  • 感谢您帮助实际找到问题(但尚未解决)似乎 jekyll 试图在 Rails 下运行导致一些 gem 问题和“US-ASCII 错误中的无效字节序列”在我的降价文件..有没有办法不在我的 Rails 应用程序下运行 jekyll?

标签: ruby-on-rails git bash shell


【解决方案1】:

是的,这是意料之中的。默认情况下,如果 stderr 连接到 TTY,Git 只会打印进度状态。您可以在终端中重现此行为:

$ git clone $GIT_REPO 2>&1 | cat

传递 --progress 以始终获取 stderr 流的进度状态。见git-clone(1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2022-11-16
    • 2023-04-03
    • 1970-01-01
    相关资源
    最近更新 更多