Bash脚本未运行tclsh

Bash脚本未运行tclsh,bash,tcl,Bash,Tcl,我能够在远程家庭上正确运行bash。我在远程主机上安装了TCL,但无法运行TCL。当我运行这个脚本时,我没有得到任何错误 #!/bin/bash ssh root@XXX.XXX.XXX.XXX << EOF echo "Connected"; echo "CD TO ~"; cd ~; echo "Create text file"; script=' set data "This is some test data.\n" set filenam

我能够在远程家庭上正确运行bash。我在远程主机上安装了TCL,但无法运行TCL。当我运行这个脚本时,我没有得到任何错误

#!/bin/bash
ssh root@XXX.XXX.XXX.XXX << EOF
echo "Connected";
echo "CD TO ~";
cd ~;
echo "Create text file";

script='
        set data "This is some test data.\n"
        set filename "test.txt"
        set fileId [open $filename "w"]
        puts -nonewline $fileId $data
        close $fileId
exit 0'

tclsh << HERE
$script
echo "Exit";

exit
EOF
#/bin/bash

sshroot@XXX.XXX.XXX.XXX默认情况下,Heredocs会扩展其中的变量,因此您的
[open$filename“w”]
将更改为
open“w”]
(以及其他地方的类似更改),除非您在外部脚本中导出了
filename
变量。如果您不希望出现这种扩展,请引用您的标志:

ssh root@XXX.XXX.XXX.XXX <<'EOF'

script='content'

# intentionally not quoting this sigil, since in this case expansion is desired
tclsh <<HERE
$script
HERE

EOF

sshroot@XXX.XXX.XXX.XXX默认情况下,Heredocs会扩展其中的变量,因此您的
[open$filename“w”]
将更改为
open“w”]
(以及其他地方的类似更改),除非您在外部脚本中导出了
filename
变量。如果您不希望出现这种扩展,请引用您的标志:

ssh root@XXX.XXX.XXX.XXX <<'EOF'

script='content'

# intentionally not quoting this sigil, since in this case expansion is desired
tclsh <<HERE
$script
HERE

EOF

sshroot@XXX.XXX.XXX.XXX这总是最简单的事情,我认为现在开始使用单独的文件来处理事情更容易。把所有的东西都放在一个整体上是很好的,但是过了一段时间,混乱不可避免地增加了…这总是最简单的事情。我认为现在开始使用单独的文件处理事情更容易。把所有的东西都放在一起是很好的,但是过了一段时间,混乱不可避免地增加了…顺便说一句,你也缺少了一个
。大概应该在
回显“Exit”
之前。您不想引用的那一个,因为您将该heredoc用作与herestring等效的POSIX sh。谢谢@CharlesDuffy现在一切都很好:Dbtw,您也缺少一个
。大概应该在
回显“Exit”
之前。你不想引用的那一个,因为你使用的是一个相当于herestring的POSIX sh