Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将通过ssh远程执行的命令的输出列表分配给shell中的变量_Shell - Fatal编程技术网

将通过ssh远程执行的命令的输出列表分配给shell中的变量

将通过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

我正在尝试连接到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来实现这一点,这是一种选择。请注意,下面的解决方案不会将
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”)
?我正在本地运行它,并从远程服务器获取结果。我想将输出(目录列表)分配给一个变量,找出编号最高的目录,然后进入该目录并获取一些文件。这些目录总是有数字,不会有任何字符或字符串。