Cygwin -Windows无法初始化设备PRN

时间:2013-04-26 13:21:57

标签: windows shell cygwin

我正在Windows命令提示符下执行shell脚本,方法是将bash作为打开.sh文件的默认应用程序。我可以在没有输入参数的情况下运行任何脚本,但是对于那些带有输入参数的脚本,我得到错误“无法初始化设备PRN”。我可以看到参数没有传递给脚本。如何从windows命令行向shell脚本传递参数?

这就是我在命令提示符下所做的。

X:> OracleSPExec.sh Procedure Database
PROCEDURE=
export PROCEDURE
DATABASE=
export DATABASE

3 个答案:

答案 0 :(得分:8)

shell脚本似乎使用print命令/ builtin,这可能与将文件打印到print.exe:device的Windows PRN冲突。

答案 1 :(得分:1)

两个可能的问题:

  1. 缺少shebang #!
  2. 您必须在脚本的开头添加此行:

     #!/usr/bin/bash
    
    1. 文件开头的Unicode BOM
    2. 有时如果文件是用带有BOM的UTF-8编写的,则无法解释shebang。删除shebang前面的标题(隐藏?)字符。

答案 2 :(得分:1)

我遇到了这个问题,尝试运行一些本地发明的标记脚本,这些脚本曾经工作但我有一台新的笔记本电脑并且它运行的是Windows 10. bash 在我安装的cygwin版本中,似乎没有print作为内置命令(它有printenvprintf作为外部命令)并且有除print中的System32以外的任何$ type print print is hashed (/cygdrive/c/WINDOWS/system32/print) $ type echo echo is a shell builtin 命令:

alias print=echo

作为解决方法,我在每个脚本的顶部附近添加了这一行:

/* MySQL settings - You can get this info from your web host */
/* The name of the database for WordPress */
define('DB_NAME', 'prefix_name');
/* MySQL database username */
define('DB_USER', 'prefix_user');
/* MySQL database password */
define('DB_PASSWORD', 'password');

这消除了"无法初始化设备PRN"问题。知道为什么这一点在某一点上起作用仍然很好。