GNU 屏幕:打开 window 并从 Bash 脚本中的循环发送命令
GNU Screen: Open window and send command from loop in Bash script
已解决!见下文
我有一个脚本应该执行以下操作:
- 从文件中读取一行,该行的形式为ftp://user:pass@ftp.server.com/path/to/dir/
- 在给定的 GNU 屏幕会话中的新 window 中启动一个新的 lftp 实例,该会话将启动脚本的目录的内容上传到 1.[=30= 中给出的目录]
- 对文件中的下一行重复 1-2,不管有多少行。
由于屏幕会话的默认工作目录可能与当前工作目录不同,因此脚本必须先更改为当前工作目录。
目前脚本如下所示:
#!/bin/bash
SERVERLIST=
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 命令没有 运行...当我重新连接到屏幕会话时,只有一个 window(而不是 #_of_lines windows) 并且没有上传完成。
目前(在评论中得到@Cyrus 的帮助后)脚本如下所示:
#!/bin/bash
SERVERLIST=
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)
这似乎行得通!
已解决!见下文
我有一个脚本应该执行以下操作:
- 从文件中读取一行,该行的形式为ftp://user:pass@ftp.server.com/path/to/dir/
- 在给定的 GNU 屏幕会话中的新 window 中启动一个新的 lftp 实例,该会话将启动脚本的目录的内容上传到 1.[=30= 中给出的目录]
- 对文件中的下一行重复 1-2,不管有多少行。
由于屏幕会话的默认工作目录可能与当前工作目录不同,因此脚本必须先更改为当前工作目录。
目前脚本如下所示:
#!/bin/bash
SERVERLIST=
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 命令没有 运行...当我重新连接到屏幕会话时,只有一个 window(而不是 #_of_lines windows) 并且没有上传完成。
目前(在评论中得到@Cyrus 的帮助后)脚本如下所示:
#!/bin/bash
SERVERLIST=
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)
这似乎行得通!