将参数从命令行传递到tcl脚本

时间:2014-06-24 00:01:23

标签: bash tcl

我有一个TCL脚本,其中有许多参数被定义为参数。我打算创建一个作业文件,我可以使用不同的参数组合执行.tcl脚本,而无需人工干预。

我的意思如下:

作业文件(run.sh):

./main.tcl arg1 arg2 arg3 arg4 
./main.tcl arg1 arg3 arg5

现在我希望能够将run.sh中提到的每次运行的命令行参数数组“argv”作为数组传递到main.tcl脚本中,以便在执行之前在脚本中相应地设置选项。

有没有办法链接.sh脚本和.tcl脚本?

2 个答案:

答案 0 :(得分:6)

online document here

  

可以将数字传递到脚本并由脚本使用的方法   如下。

     

argc argv argv0

     

所有Tcl脚本都可以访问三个预定义变量。       $ argc - 传递给脚本的参数的数量项。       $ argv - 参数列表。       $ argv0 - 脚本的名称。

     

要使用参数,可以按如下方式重写脚本。

if { $argc != 2 } {
    puts "The add.tcl script requires two numbers to be inputed."
    puts "For example, tclsh add.tcl 2 5".
    puts "Please try again."
} else {
    puts [expr [lindex $argv 0] + [lindex $argv 1]]
    }

答案 1 :(得分:0)

除上述答案外,我发现以下内容有帮助:

为了在QuestaSim / ModelSim / Quartus中运行,我遵循以下资源:http://www.alteraforum.com/forum/showthread.php?t=3034

通常我们可以使用@IBAction func submit(_ sender: AnyObject) { let requestURL = URL(string: "*****") let request = NSMutableURLRequest(url:requestURL!) request.httpMethod = "POST" let song=txt1.text! let artist=txt2.text! let album=txt3.text! let year=txt4.text! let genre=txt5.text! let songPost = "song=" + (song as String) let artistPost = "&artist=" + (artist as String) let albumPost = "&album=" + (album as String) let yearPost = "&year=" + (year as String) let genrePost = "&genre=" + (genre as String) request.httpBody = songPost.data(using: String.Encoding.utf8); request.httpBody = artistPost.data(using: String.Encoding.utf8); request.httpBody = albumPost.data(using: String.Encoding.utf8); request.httpBody = yearPost.data(using: String.Encoding.utf8); request.httpBody = genrePost.data(using: String.Encoding.utf8); --->>let task = URLSession.shared.dataTask(with: request) { data, response, error in guard let data = data, error == nil else { // check for fundamental networking error print("error=\(error)") print(response) return } if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 { // check for http errors print("statusCode should be 200, but is \(httpStatus.statusCode)") print("response = \(response)") } let responseString = String(data: data, encoding: .utf8) print("responseString = \(responseString)") } task.resume() 命令运行.tcl脚本,但这并不像base .tcl脚本可以正常使用那样固有地处理参数。因此,通过使用流程,您可以实现相同的目标。