代码之家  ›  专栏  ›  技术社区  ›  George Mauer

为什么在powershell中使用管道不起作用?

  •  1
  • George Mauer  · 技术社区  · 16 年前

    exit | sqlplus username/password@sid @test.sql
    

    为什么会这样,我该怎么解决?

    2 回复  |  直到 16 年前
        1
  •  5
  •   Community Mohan Dere    8 年前

    exit

    sqlplus username/password@sid @test.sql
    exit
    

    ETA: 正如你的评论所指出的,这是一个完全不同的问题。您从以下位置复制了命令行 this answer 错了。如果你想 发送文本 在管道稍后的命令中“退出”,您需要以某种方式输出它。这可以在cmd和Powershell中通过以下方式完成 echo 因此,你不应遗漏 回声 在这里:

    回声 exit | sqlplus username/password@sid @test.sql

    "exit" | sqlplus username/password@sid @test.sql
    
        2
  •  2
  •   Richard Berg    16 年前

    奇怪的问题。根据链接的SO帖子和 Oracle documentation

    与CMD不同,'exit'不是语言关键字;这是对脚本环境的指令。(你可以通过运行'gcm-exit'来亲眼看到——什么也找不到)。所以我并不惊讶这行不通。

    为什么不像Oracle文档建议的那样在输入流的末尾附加一个EOF字符呢?在Windows上,这将是^Z(Ctrl+Z,ASCII 0x1A)。或者,如果你真的想,你可以插入文本“退出”。

    通过修改磁盘上的文件,或将文件读取到流中并使用|运算符来实现这一点——以更适合您的情况为准。

    编辑:在注释中为每个请求添加一些示例脚本

    # add EOF to file on disk
    [char]0x1a >> test.sql
    sqlplus username/password@sid @test.sql
    
    # add 'exit' to file on disk
    'exit' >> test.sql
    sqlplus username/password@sid @test.sql
    
    # add 'exit' in-memory
    # assumes sqlplus reads from stdin as shown in other examples; don't have Oracle to test
    (gc test.sql) + 'exit' | sqlplus username/password@sid
    
    # wrapper function
    function Invoke-SqlPlus($file) { (gc $file) + 'exit' | sqlplus username/password@sid }
    new-alias sql Invoke-SqlPlus
    # usage
    sql test.sql