在我的脚本中,有时我需要将脚本传递给SSH,有时候让用户进行交互。
我试过这个伎俩:
if [ "" != "$SSH_SCRIPT" ] ; then
...
else
SSH_SCRIPT="&0";
fi
然后:
ssh $SSH_IGNORE_STDIN $SSH_TTY $noKeyCheck -i $AWS_KEY $USER_@$HOST_ "$COMMAND_SSH" <$SSH_SCRIPT;
我认为这可行,因为cat <&0
有效。
但是当我在<
之后使用变量时,它的工作方式不同 - 它抱怨找不到文件&0
。看起来<&n
是一种语法结构。以这种方式重现:
$ FOO='&0';
$ cat <$FOO
bash: &0: No such file or directory
有没有办法按文件描述符编号参数化重定向?
将整个命令封装到bash -c "..."
可能不是一个好主意,因为它会使整个事情变得更复杂。
将命令上传到远程服务器并在那里运行它也有点矫枉过正。
到目前为止,我已经诉诸:
if [ "" == "$SSH_SCRIPT" ] ; then
ssh $SSH_IGNORE_STDIN $SSH_TTY $noKeyCheck -i $AWS_KEY $USER_@$HOST_ "$COMMAND_SSH";
else
ssh $SSH_IGNORE_STDIN $SSH_TTY $noKeyCheck -i $AWS_KEY $USER_@$HOST_ "$COMMAND_SSH" <$SSH_SCRIPT;
fi
答案 0 :(得分:2)
bash
会将/dev/stdin
识别为重定向的参数,无论文件系统是否公开此类文件。
if [ -z "$SSH_SCRIPT" ]; then
SSH_SCRIPT=/dev/stdin
fi
ssh ... < "$SSH_SCRIPT"