如何将bash变量传递给cmd?

时间:2016-04-20 05:31:31

标签: 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   

1 个答案:

答案 0 :(得分:1)

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

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

在特殊情况下,您在while循环中运行ssh命令,我强烈建议将/dev/tty显式传递给命令,因为一旦远程命令应该从stdin读取 - 无论出于何种原因 - 它将否则会沉溺于while循环的stdin:

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

注意:只有在终端中启动了进程,上述命令才有效。如果进程没有在终端中运行,则需要将其他内容作为stdin传递给内部ssh命令。