为什么在Sun(Unix)上执行的csh脚本会在Windows上的记事本中打开? 使用2个参数的CSH脚本使用JavaC++函数的 Stor()/Cudio>调用如下: int ret = system("abc.csh C:\tmp\file.tmp $VAR_NAME");

为什么在Sun(Unix)上执行的csh脚本会在Windows上的记事本中打开? 使用2个参数的CSH脚本使用JavaC++函数的 Stor()/Cudio>调用如下: int ret = system("abc.csh C:\tmp\file.tmp $VAR_NAME");,windows,csh,Windows,Csh,在Sun上运行时,脚本将正确执行,接受参数并将$VAR\u NAME的值写入C:\tmp\file.tmp 但是当在Windows上运行时,abc.csh会在默认文本编辑器记事本中打开 如何使脚本在Windows上以同样的方式执行?此系统调用依赖于操作系统打开脚本 在unix上,如果脚本是可执行的,则操作系统将知道如何执行它(使用bang来确定要使用的解释器) 另一方面,Windows不知道如何执行csh脚本。它不尝试执行可执行脚本(如Sun do),而是将脚本作为普通文本文件打开:使用记事本

Sun上运行时,脚本将正确执行,接受参数并将
$VAR\u NAME
的值写入
C:\tmp\file.tmp

  • 但是当在Windows上运行时,
    abc.csh
    会在默认文本编辑器记事本中打开


  • 如何使脚本在Windows上以同样的方式执行?

    此系统调用依赖于操作系统打开脚本

    在unix上,如果脚本是可执行的,则操作系统将知道如何执行它(使用bang来确定要使用的解释器)

    另一方面,Windows不知道如何执行csh脚本。它不尝试执行可执行脚本(如Sun do),而是将脚本作为普通文本文件打开:使用记事本(或任何配置为打开文本文件的文本编辑器)

    如果要使脚本在windows上可执行,必须安装csh shell并将其与
    .csh
    文件关联,以便在打开csh脚本时windows将使用该shell


    另一种解决方案是显式地将shell与以下内容结合使用:
    系统(“csh abc.csh…”)
    (这仍然需要在系统上安装csh)

    可能是因为
    .csh
    在windows上的文件扩展名未知?windows上的Shell脚本通常位于
    .bat
    .cmd
    文件中;shell脚本尝试运行的命令在Windows上也不可用。引用Larry Wall的话:“移植shell比移植shell脚本更容易”。换言之,您可能无法在Windows上运行此命令而不进行修改。如果在命令行(例如abc.csh C:\tmp\file.tmp$VAR_NAME)中发出system()调用中的命令,则将在abc.csh中使用扩展的$VAR_NAME。i、 e.将使用其价值。但是,当通过程序调用(从与上面相同的shell调用)作为int-ret=system(“csh abc.csh C:\tmp\file.tmp$VAR_NAME”);它将只使用$VAR_NAME文本(不扩展到实际值),而不知道如何在程序中将其扩展到实际值。(与之前一样,在Sun上,即使在程序中,它也会扩展到其实际值)