GNU Screen:在Bash脚本

时间:2017-10-29 06:17:22

标签: bash gnu-screen quoting

解决!见下文

我有一个应该执行以下操作的脚本:

  1. 从文件中读取一行,该行采用ftp://user:pass@ftp.server.com/path/to/dir/
  2. 形式
  3. 在给定GNU屏幕会话的新窗口中启动lftp的新实例,该窗口会话将启动脚本的目录内容上载到1中给出的目录。
  4. 使用文件中的下一行重复1-2,无论有多少行。
  5. 由于屏幕会话的默认工作目录可能与当前工作目录不同,因此脚本必须首先更改为当前工作目录。

    目前脚本如下所示:

    #!/bin/bash
    
    SERVERLIST=$1
    INITIAL_WD="$PWD"
    SCREEN_SESSION="mysession"
    
    if ! screen -list | grep -q "$SCREEN_SESSION"; then
        echo "Creating new screen session..."
        screen -d -m -S "$SCREEN_SESSION"
    fi
    
    while IFS='' read line || [[ -n "$line" ]] ; do
    echo "Uploading to ${line}"
    screen -S "$SCREEN_SESSION" -X screen 'cd $INITIAL_WD ; lftp -e "set ftp:ssl-allow false; mirror -Rvc" "$line"'
    done < <(cat $SERVERLIST)
    

    不幸的是,这不起作用。该脚本似乎执行,但lftp命令没有运行...当我重新连接到屏幕会话时,只有一个窗口(而不是#_of_lines窗口)并且没有上传。

1 个答案:

答案 0 :(得分:0)

此刻(在评论中@Cyrus的一些帮助之后),脚本看起来如下所示:

#!/bin/bash

SERVERLIST=$1
INITIAL_WD="$PWD"
SCREEN_SESSION="mysession"

if ! screen -list | grep -q "$SCREEN_SESSION"; then
    echo "Creating new screen session..."
    screen -d -m -S "$SCREEN_SESSION"
fi

while IFS='' read line || [[ -n "$line" ]] ; do
echo "Uploading to ${line}"
screen -S "$SCREEN_SESSION" -X chdir "$INITIAL_WD"
screen -S "$SCREEN_SESSION" -X screen bash -c "lftp -e \"set ftp:ssl-allow false; mirror -Rvc\" \"$line\" ; exec bash"
done < <(cat $SERVERLIST)

这似乎有效!