Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过tcl脚本从bash脚本执行一组命令_Bash_Shell_Tcl - Fatal编程技术网

通过tcl脚本从bash脚本执行一组命令

通过tcl脚本从bash脚本执行一组命令,bash,shell,tcl,Bash,Shell,Tcl,我试图通过tcl脚本执行bash脚本中指定的一组命令。我对tcl非常陌生,所以我找不到这样做的方法,我也参考了很多堆栈溢出链接,所以现在我知道如何从tcl脚本执行单个命令 现在我用它来执行一个命令- exec /usr/bin/sshpass ssh -o StrictHostKeyChecking=no $command 但是如何确保脚本从bash脚本中一次读取一个命令,并为每个命令执行上述命令?应该是commands.sh,没有区别,但仍然是。嗯,它可能根本没有任何扩展名,它仍然可以工作:

我试图通过tcl脚本执行bash脚本中指定的一组命令。我对tcl非常陌生,所以我找不到这样做的方法,我也参考了很多堆栈溢出链接,所以现在我知道如何从tcl脚本执行单个命令

现在我用它来执行一个命令-

exec /usr/bin/sshpass ssh -o StrictHostKeyChecking=no $command

但是如何确保脚本从bash脚本中一次读取一个命令,并为每个命令执行上述命令?

应该是commands.sh,没有区别,但仍然是。嗯,它可能根本没有任何扩展名,它仍然可以工作:)如果只是想用一个文件来存储命令列表,而不是真正将其视为shell脚本,.sh扩展名可能会令人困惑。请在打开大括号之前尽量避免断行。这是非常糟糕的风格。@PeterLewerin:这是我们在TCL代码组织中遵循的编码惯例的一部分。你为什么认为这是一种糟糕的风格?(如果断线后出现意外空格,则出错的可能性更大?)请注意,这不是我个人的风格选择:这是普遍接受的风格(见第6.5点)。您提到的错误是其原因之一,但主要原因是它使代码更易于在程序员之间共享。在StackOverflow上,我们都必须对我们的个人或本地风格做出妥协,如果你想对其他Tcl程序员有所帮助,这是你真正需要做出的妥协。这应该是commands.sh,没有什么区别,但仍然是。嗯,它可能根本没有任何扩展名,它仍然可以工作:)如果只是想用一个文件来存储命令列表,而不是真正将其视为shell脚本,.sh扩展名可能会令人困惑。请在打开大括号之前尽量避免断行。这是非常糟糕的风格。@PeterLewerin:这是我们在TCL代码组织中遵循的编码惯例的一部分。你为什么认为这是一种糟糕的风格?(如果断线后出现意外空格,则出错的可能性更大?)请注意,这不是我个人的风格选择:这是普遍接受的风格(见第6.5点)。您提到的错误是其原因之一,但主要原因是它使代码更易于在程序员之间共享。在StackOverflow上,我们都必须对我们的个人或本地风格做出妥协,如果你想对其他Tcl程序员有所帮助,这是你真正需要做出的妥协。你为什么不发送整个文件呢?这就是我正在做的,我正在发送整个文件。我只是希望命令一个接一个地执行,这样我就可以有一些交互输出,告诉我每个命令的状态。你为什么不发送整个文件呢?这就是我正在做的,我正在发送整个文件。我只希望命令一个接一个地执行,这样我就可以有一些交互输出,告诉我每个命令的状态。
sharad@ss:~$ cat commands.txt 
date
uname -m
sharad@ss:~$ 

sharad@ss:~$ cat my.tcl
set fileHandle [open commands.txt]
set commands [read $fileHandle]
close $fileHandle

foreach command [split $commands "\n"] {
    set command [string trim $command]
    if {$command == ""} {
        continue
    }
    puts "command=$command,result=[exec ssh sharad@localhost bash -c  $command]"
}
sharad@ss:~$ 


sharad@ss:~$ tclsh my.tcl
command=date,result=Tue Apr 12 02:47:28 EDT 2016
command=uname -m,result=Linux
sharad@ss:~$