【问题标题】:at command force script not to read from text file在命令强制脚本不从文本文件中读取
【发布时间】:2015-01-02 17:30:09
【问题描述】:

我有一个名为 bckp2 的脚本和一个名为 variables.txt 的文本文件。当我在终端./bckp2 中运行这样的脚本时,它完全按照我的意愿运行,但是当我尝试使用at 像这样at -f bckp2 19:30 运行它时,它不起作用,它不起作用一样。使用at 命令,它似乎没有从文件中读取,我不知道为什么。

脚本bckp2 从文本文件variables.txt 中读取3 个单词,并将它们用作tar 命令的源和目标。忽略它用于测试的第一个单词

let count=0

while read line; do
 for word in $line; do
  if [ $count -eq 0 ]
   then
     username=$word
  elif [ $count -eq 1 ]
   then
     source=$word
  elif [ $count -eq 2 ]
   then
     destination=$word
  fi
  let count=count+1
 done
done < variables.txt

echo $destination $source  > test.txt
tar -cvf $destination.tar $source

文本文件variables.txt

valkon fake faketar

在脚本bckp2 中,我将文件内容保存到变量中,只是为了查看at 是否有效,而它没有。它正在写入文件空白文本,所以我假设脚本根本不从文件中读取。但正如我告诉你的,当我像./bckp2 一样运行它时,它可以工作。

【问题讨论】:

  • 您的整个while read ... &lt; variables.txt 最好写成read username source destination &lt; variables.txt... 请记住,通过atbatch 运行的作业可能与您的终端会话具有不同的环境(虽然它确实试图保留大部分内容),并且它们通常由 /bin/sh 而不是 /bin/bash 运行 - 所以您可能需要在脚本顶部使用 #!/bin/bash...
  • 是的,你说的一切都解决了我的问题,while 循环和#!/bin/bash。您能回答这个问题,以便我接受您的回答吗?

标签: linux at-command


【解决方案1】:

atbatch 默认使用/bin/sh 解释命令,而不是/bin/bash。如果您想使用不同的 shell,您需要适当地格式化您的脚本,将#!/bin/bash 添加为脚本的第一行。

此外,您用于读取变量的不必要的复杂循环可以简单地替换为

read username source destination < variables.txt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-23
    • 1970-01-01
    • 2014-11-07
    • 2015-07-07
    相关资源
    最近更新 更多