为什么在第一次循环后不执行while循环?

时间:2019-07-02 19:38:45

标签: bash

我需要一个脚本来每x秒制作一个屏幕截图。在代码中,为了简单起见,我使用触摸。

运行代码时,将运行第一次触摸(屏幕截图1)并创建一个文件。但等待5秒钟后,它回显屏幕截图2,但触摸未运行。因为没有文件被创建。我不知道为什么会这样。

#!/usr/bin/env bash
file=$(date +%Y-%m-%d.%H:%M:%S)    
x=1    
while true
do    
  echo "screenshot $x"    
  touch $file.jpg    
  sleep 1      
  x=$[$x+1]    
done

1 个答案:

答案 0 :(得分:5)

每次循环运行时,您都应该重新分配$ {file}!您是在循环外进行分配,因此每次都使用相同的文件名!

x=1

while true; do
  # Assign a new name (with a new timestamp) to $file, and a file
  # with a new name will be created!
  file=$(date +%Y-%m-%d.%H:%M:%S)

  echo "screenshot $x"

  touch $file.jpg

  sleep 1

  x=$(( x + 1 ))

done

注意:您的触摸命令正在运行,只是应用了相同的文件名。希望这会有所帮助!