bash - Bash 将标准输入重定向为标准输入
问题描述
在我的脚本中,有时我需要将脚本传递给 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
解决方案
bash
无论您的文件系统是否公开此类文件,都会将其识别/dev/stdin
为重定向的参数。
if [ -z "$SSH_SCRIPT" ]; then
SSH_SCRIPT=/dev/stdin
fi
ssh ... < "$SSH_SCRIPT"
推荐阅读
- c++ - 优化器可以忽略从 64 位到 32 位整数类型的分配吗?
- r - 调整数据框中的不等式并根据给定的期望值将值更改为数字
- django - 如何使 Django 有效地修改 JSONField 值
- email - hotmail.com 与 hotmail.co.uk 的 smtp 设置是否不同?
- codenameone - `Theme` 编辑器和设置样式的编程方法使用完全不同的单位
- css - 在页脚中将图标靠得更近出了问题?
- python - cv2.warpPerspective 和 cv2.PerspectiveTransform 有什么区别?
- mysql - 模型未关联到模型 Sequelize nodejs belongsToMany 与迁移关联
- c++ - c++中的高精度计时器
- javascript - 带产量的生成器函数