Shell:script.sh正在写入空文件

Shell:script.sh正在写入空文件,shell,ansible,ansible-playbook,Shell,Ansible,Ansible Playbook,我有一本剧本: --- - name: Preparing the diff file (show | compare) hosts: 127.0.0.1 gather_facts: no connection: local tasks: - name: "Creating a diff file" shell: "{{config_dir}}/diff.sh" 还有一个剧本: #!/bin/sh #find . -size +0 -name diff -prin

我有一本剧本:

---
- name: Preparing the diff file (show | compare)
  hosts: 127.0.0.1
  gather_facts: no
  connection: local

  tasks:
  - name: "Creating a diff file"
    shell: "{{config_dir}}/diff.sh"
还有一个剧本:

#!/bin/sh
#find . -size +0 -name diff -printf "\n%p\n" -exec cat {} \; > $HOME/diff.all
#find . -size +0 -name diff -printf "\n%p\n" -exec cat {} \; > mytest.beep
more */diff | less > doop
任务启动脚本,脚本获取所有名为“diff”的文件,并将其内容放入test.txt

当我在shell中运行这个命令时,它就工作了

当我运行这个脚本时,它可以工作

当我运行这个剧本时,它会创建text.txt,但文件总是空的

我用相同的目标尝试了不同的脚本

我尝试通过Ansible而不是在脚本中添加文件创建:

  tasks:
  - name: "Creating a diff file"
    shell: "{{config_dir}}/diff.sh > test.txt" (Also tried with >>)
我试着加上:真的

每次,我的剧本都成功运行,test.txt被创建,但它总是空的

我错过了什么


谢谢,

脚本运行在错误的目录中。通过将-v添加到ansible playbook命令中,可以很容易地进行调试。

当未连接到TTY时,您希望
more
less
以合理的方式运行吗?简单地说,这是一个没有这些工具的记录行为支持的期望
cat*/diff>test.txt
…除此之外,
set-x
是你的朋友。如果脚本运行
exec 2>/path/to/log.txt;设置-x,然后它将记录它试图在中运行的内容。。。嗯
log.txt
。在另一点上,
.sh
扩展是不好的形式:UNIX
execve()
-风格的系统调用提供了程序之间接口的最小依赖方式,这意味着调用方不需要知道或关心被调用方编写的语言。当您在文件名中输入语言信息时,您的意思是,当您用其他语言重写被调用方时,您需要更改所有调用方,或者最终得到名为
.sh
但用非shell语言编写的程序。哦,请确保您的脚本中有一个shebang。当脚本被解释器调用时,如果操作系统本身无法执行exec,解释器会做出假设,但这并不总是正确的,那么您可以不使用解释器;正确的做法是始终使用shebang,而不需要在事情发生和不发生时四处猜测。好的,我使用的是shebang。这是完整的脚本: