将通过ssh远程执行的命令的输出列表分配给shell中的变量
我正在尝试连接到Linux服务器并执行一些命令。下面是它的代码片段和输出。我想将“ls”的输出分配给一个变量,以便进一步处理它。让我知道怎么做将通过ssh远程执行的命令的输出列表分配给shell中的变量,shell,Shell,我正在尝试连接到Linux服务器并执行一些命令。下面是它的代码片段和输出。我想将“ls”的输出分配给一个变量,以便进一步处理它。让我知道怎么做 USERNAME=root PASSWD=abc HOST=1.2.3.4 SCRIPT="cd /tmp/sample/; ls" cmd="ssh -l $USERNAME $HOST $SCRIPT" $cmd 输出:如下所示列出目录 5 6 7 10 12 你 如果您真的需要用bash来实现这一点,这是一种选择。请注意,下面的解决方案不会将l
USERNAME=root
PASSWD=abc
HOST=1.2.3.4
SCRIPT="cd /tmp/sample/; ls"
cmd="ssh -l $USERNAME $HOST $SCRIPT"
$cmd
输出:如下所示列出目录
5
6
7
10
12
你
如果您真的需要用bash来实现这一点,这是一种选择。请注意,下面的解决方案不会将ls
输出存储在单个变量中,而是逐行处理输出
#!/usr/bin/env bash
USERNAME=******
PASSWD=********
HOST=127.0.0.1
SCRIPT="cd /tmp/; ls"
cmd="ssh -l $USERNAME $HOST $SCRIPT"
while IFS= read -r line
do
echo "$line"
done< <($cmd)
#/usr/bin/env bash
用户名=******
PASSWD=********
主机=127.0.0.1
SCRIPT=“cd/tmp/;ls”
cmd=“ssh-l$USERNAME$HOST$SCRIPT”
而IFS=读取-r行
做
回音“$line”
完成<这对我来说并不整洁:
SCRIPT="cd /tmp/sample/; ls"
cmd="ssh -l $USERNAME $HOST $SCRIPT"
像这样混合使用本地和远程命令有时会导致误解
如果可以使用bash,更好的方法是使用数组:
SCRIPT="cd /tmp/sample/; ls"
CMD=(ssh -l "$USERNAME" "$HOST" "$SCRIPT")
OUTPUT=$("${CMD[@]}")
echo "$OUTPUT"
如果愿意,可以将输出另存为行数组:
SCRIPT="cd /tmp/sample/; ls"
CMD=(ssh -l "$USERNAME" "$HOST" "$SCRIPT")
readarray -t OUTPUT < <("${CMD[@]}")
for A in "${OUTPUT[@]}"; do
echo "$A"
done
SCRIPT=“cd/tmp/sample/;ls”
CMD=(ssh-l“$USERNAME”“$HOST”“$SCRIPT”)
readarray-t OUTPUT<是否要将其分配给远程服务器或本地计算机中的变量?如果在shell中键入该脚本,是否获得所需的输出?将cmd=
的赋值替换为数组赋值或直接执行不是更好吗?您不能简单地使用output=$(ssh-l$USERNAME$HOST“$SCRIPT”)
?我正在本地运行它,并从远程服务器获取结果。我想将输出(目录列表)分配给一个变量,找出编号最高的目录,然后进入该目录并获取一些文件。这些目录总是有数字,不会有任何字符或字符串。