linux - 如何将bash变量传递给cmd?

标签 linux bash batch-file

如何将 $line 传递给 cmd 命令?

#!/bin/bash
while read line           
do           
    sshpass -p "..." ssh -o StrictHostKeyChecking=no -tt windows@172....-p 333  cmd /c "cd C:\ & download_give_id.exe '$@$line' "

done <apps.txt   

最佳答案

基本上,如果你想将变量插入到 bash 字符串中,你需要使用双引号而不是单引号:

str="${var} foo bar" # works
str='${var} for bar' # works not

在 while 循环内运行 ssh 命令的特殊情况下,我强烈建议将 /dev/tty 作为命令的输入显式传递,因为一旦远程命令应从标准输入读取 -无论出于何种原因 - 否则它将吞噬 while 循环的标准输入:

while read line ; do
    ssh ... -- "${line} ..."  < /dev/tty # Pass tty to stdin
done < input.txt

注意:以上命令只有在进程已经在终端中启动时才有效。如果该进程未在终端中运行,您需要传递其他内容作为内部 ssh 命令的标准输入。

关于linux - 如何将bash变量传递给cmd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36734600/

相关文章:

java - 在 Java hdfs 中读取文件

linux - 在后台运行您自己的 python 脚本

linux - Linux CentOS 7 上的 Supervisord 仅在使用 root 运行时有效

bash - 获取第 m 行和第 n 行之间的内容

bash - 临时文件没有被赋予正确的名称。 $BASHPID 正在改变?

linux - Grep 一件事然后从下面的行中删除

linux - 使用 sox 和 bash 将两个 wav 文件交替成一个

windows - 在批处理文件参数中保留 "="(相等)字符

java - 用于检查 Java 主目录并比较 java 版本的批处理脚本

eclipse - 在 Google Drive/DropBox 中存储代码