我有一个TCL脚本,其中有许多参数被定义为参数。我打算创建一个作业文件,我可以使用不同的参数组合执行.tcl脚本,而无需人工干预。
我的意思如下:
作业文件(run.sh):
./main.tcl arg1 arg2 arg3 arg4
./main.tcl arg1 arg3 arg5
现在我希望能够将run.sh中提到的每次运行的命令行参数数组“argv”作为数组传递到main.tcl脚本中,以便在执行之前在脚本中相应地设置选项。
有没有办法链接.sh脚本和.tcl脚本?
答案 0 :(得分:6)
可以将数字传递到脚本并由脚本使用的方法 如下。
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脚本可以正常使用那样固有地处理参数。因此,通过使用流程,您可以实现相同的目标。