【问题标题】:Windows TYPE to Console recreated using Unix Shell scripting使用 Unix Shell 脚本重新创建 Windows TYPE 到控制台
【发布时间】:2012-11-10 03:51:38
【问题描述】:

我们有简单的 Windows 批处理文件,当发生错误时,会运行“ONCALL.bat”文件以显示支持信息,该信息保存在单独的 oncall.txt 文本文件中。这是我们的 SOP。

ONCALL.BAT

set scriptpath=%~dp0

TYPE "%scriptpath%oncall.txt"

我对 Unix 和 Shell 脚本的经验为零,我需要快速提供一个等效于在 Unix 环境中运行的 shell 脚本。

有人可以提供此代码的 .sh 等效项吗?

【问题讨论】:

    标签: windows unix scripting batch-file


    【解决方案1】:

    假设帮助文件和脚本在同一个目录:

    #!/bin/sh
    
    SCRIPTPATH=`dirname "$0"`
    
    cat "$SCRIPTPATH"/oncall.txt
    

    $0是当前脚本的文件路径; dirname 命令提取其中的目录部分。这样您就可以避免在脚本中为帮助文件使用硬编码路径。

    【讨论】:

      【解决方案2】:
      cat oncall.sh
      #!/bin/bash
      scriptpath=/path/to/scripts
      
      cat ${scriptpath}/oncall.txt
      

      创建文件后,运行不会有什么坏处

       dos2unix oncall.sh
      

      只是为了确保没有 Windows Ctrl-M 字符会完全让你迷惑他们可以搞砸 Unix 脚本处理的方式。

      那么

       chmod 755 oncall.sh
      

      使脚本可执行。

      确认

        ls -l oncall.sh
      

      你应该会看到类似的列表

      -rwxr-xr-x 1 userName grpname  5263 Nov 21 14:44 oncall.sh
      

      最后,使用完整路径或相对路径调用脚本,即

        ./oncall.sh
      

        $PWD/oncall.sh
      

      第一行称为“shebang”行,当您的脚本被调用时,操作系统会读取文件的第一行,以找出运行什么程序来解释脚本文件的其余部分。

      您可能希望/需要使用以下之一作为第一行“shebang”,但 bash 是一个不错的猜测

       #!/bin/ksh
       #!/bin/sh
       #!/bin/ash
       #!/bin/dash
       #!/bin/zsh
      

      或者你可能在最坏的情况下,你的 shell 存在于一个非标准目录中,那么你必须把它拼出来,即

       #!/usr/bin/ksh
      

      所有 shell 都支持用于跟踪和变量扩展的调试参数,例如

        #!/bin/ksh -vx
      

      或者你可以只包装某些行来打开和关闭调试

        set -vx
         cat ${scriptpath}/oncall.txt
        set +vx
      

      鉴于此

      % 和 0 之间的 ~dp 特殊语法基本上表示扩展变量 %0 以显示驱动器号和路径,从而为您提供包含批处理文件的当前目录!

      我认为/path/to/scripts 是一个合理的替代品,scriptpath=$PWD 将是直接替代品,因为 Unix 中没有驱动器号。那里的问题是,您要么依靠 unix PATH var 来查找脚本,要么依靠 cd /path/to/scripts 然后使用相对路径./ 运行 ./oncall.sh 来查找文件,而无需向 PATH 添加值。

      IHTH。

      猜你喜欢
      • 2018-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多