我正在尝试构建一个动态命令以在 .sh 文件中执行,但是,当我执行此操作时,它似乎以某种方式添加了 \r 字符,因此命令无法正确执行。
请注意,我使用 bash.exe 在 Windows 上运行此程序。代码示例:
我的 command.cmd 文件:
bash --login -x command.sh Parameter1
我的.sh 文件:
#!/bash
#export PATH=.
cmd="ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'"
eval "$cmd"
如果我静态运行该命令,它可以完美运行:
ssh-agent bash -c 'ssh-add /cygdrive/C/$1/id_rsa & lftp -u myUser, -e \"mirror --verbose / /cygdrive/C$1/Output; bye\" sftp://domain.com -p 22'
但是如果我按 .sh 文件上的原样运行它,它会输出以下内容:
C:\MyFolder\bin>command.cmd
C:\MyFolder\bin>bash --login -x command.sh Parameter1
+ cmd='ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -
u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sft
'://sftp.domain.com -p 22'\''
+ eval 'ssh-agent bash -c '\''ssh-add /cygdrive/C/Parameter1/id_rsa & lftp
-u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sf
'p://sftp.domain.com -p 22'\''
++ ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/Parameter1/Output; bye" sftp://sft
'.domain.com -p 22
Identity added: /cygdrive/id_rsa (rsa w/o comment)
'] `/' [Bad port '22.]
我的猜测是,由于这是在 Windows 上运行的,动态命令变量中的某些内容格式不正确,因此命令无法正常运行。如果我执行 echo 而不是 eval,则输出为:
C:\MyFolder\bin>command.cmd
C:\MyFolder\bin>bash --login -i command.sh Parameter1
ssh-agent bash -c 'ssh-add /cygdrive/C/Parameter1/id_rsa & lftp -u myUser, -e "mirror --verbose / /cygdrive/C/Parameter1/Output; bye" sftp://sftp.domain.com -p 22'
这看起来很完美。
我在这里没做什么吗?
谢谢。
答案1
没关系,后来发现是 Windows 添加了无效字符。使用 Notepad++,保存为 Unix/Linux 非常方便。