相关疑难解决方法(0)

当相同的代码在其他地方工作时,为什么shell脚本会出现语法错误?

我有一个从工作脚本复制的简单shell脚本.如果我将其复制粘贴到终端,它可以工作:

if true
then
  true
fi 
Run Code Online (Sandbox Code Playgroud)

但是,当我运行脚本时bash myscript,我会收到各种语法错误,就好像缺少某些关键字一样.

  • myscript: line 4: syntax error near unexpected token `fi' 好像then不在那里.
  • myscript: line 6: syntax error: unexpected end of file好像fi不在那里.
  • myscript: line 4: syntax error near unexpected token `$'\r' .. 什么?

为什么会在这个特定的脚本中发生这种情况,而不是在我的命令行或我复制的脚本中?

bash shell sh carriage-return

5
推荐指数
1
解决办法
4160
查看次数

加载泡菜时出错

无法加载泡菜文件。我正在使用 python 3.5

import pickle
data=pickle.load(open("D:\\ud120-projects\\final_project\\final_project_dataset.pkl", "r"))
Run Code Online (Sandbox Code Playgroud)

类型错误:需要类似字节的对象,而不是“str”

. .

还试过:

import pickle
data=pickle.load(open("D:\\ud120-projects\\final_project\\final_project_dataset.pkl", "rb"))
Run Code Online (Sandbox Code Playgroud)

UnpicklingError:必须引用 STRING 操作码参数

. .

即使使用 with 语句也会出现同样的错误

import pickle
with open("D:\\ud120-projects\\final_project\\final_project_dataset.pkl", "rb") as f:
    enron_data = pickle.load(f)
Run Code Online (Sandbox Code Playgroud)

python pickle python-3.x pickler

4
推荐指数
2
解决办法
1万
查看次数

如何在NodeJS中读取大文件?

我正在尝试读取 2000 万行文件并更正从 Windows 到 Mac 的行结尾。我知道它可以在 sed 中完成,但 sed 给了我一个我不知道如何修复的错误(dos2unix:在第 625060 行找到二进制符号 0x0008)。所以我正在尝试在 NodeJS 中解决这个问题。这是我的代码:

var fs = require('fs');
var eol = require('eol');

//read file
var input = fs.readFileSync(process.argv[2], 'utf8');

//fix lines
output = eol.auto(input);
console.log("Lines Fixed! Now Writing....")

//write file
fs.writeFile(process.argv[2] + '_fixed.txt', output, function (err) {
  if (err) return console.log(err); 
});
console.log("Done!")
Run Code Online (Sandbox Code Playgroud)

问题是文件太大,我收到此错误 buffer.js:513 throw new Error('"toString()" failed');

sed node.js

3
推荐指数
1
解决办法
2万
查看次数

意外标记 '$'in\r' 附近出现语法错误

当我构建 shell 脚本时出现以下错误,因为我是 CentOS 新手,无法找出原因,任何人都可以帮助我解决这个问题吗?

我想我们需要在执行时传递命令行参数,但不确定这里必须传递什么参数。

Shell 脚本:

#!/bin/sh

# Default place to look for apr source.  Can be overridden with
#   --with-apr=[directory]
apr_src_dir=../apr

while test $# -gt 0
do
  # Normalize
  case "$1" in
  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
  *) optarg= ;;
  esac

  case "$1" in
  --with-apr=*)
  apr_src_dir=$optarg
  ;;
  esac

  shift
done

if test -d "$apr_src_dir"
then
  echo ""
  echo "Looking for apr source in $apr_src_dir"
else
  echo ""
  echo "Problem finding apr source in $apr_src_dir."
  echo …
Run Code Online (Sandbox Code Playgroud)

linux centos7

3
推荐指数
1
解决办法
6531
查看次数

tomcat启动脚本错误

我需要将 tomcat 进程更改为由非 root 用户执行。创建用户tomcat并将其放入tomcat_group组中。更改了权限。然后更改init.d中的启动脚本。

我以 root 用户身份运行的旧脚本是

#!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.6.0_31
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export PATH
CATALINA_HOME=/usr/share/apache-tomcat-7.0.26


case $1 in
start)
sh $CATALINA_HOME/bin/startup.sh
;; 
stop)   
sh $CATALINA_HOME/bin/shutdown.sh
;; 
restart)
sh $CATALINA_HOME/bin/shutdown.sh
sh $CATALINA_HOME/bin/startup.sh
;; 
esac    
exit 0
Run Code Online (Sandbox Code Playgroud)

作为 root 用户,这运行良好。

新脚本是这样的

    #!/bin/bash
# description: Tomcat Start Stop Restart
# processname: tomcat
# chkconfig: 234 20 80
JAVA_HOME=/usr/java/jdk1.6.0_31
export JAVA_HOME
PATH=$JAVA_HOME/bin:$PATH
export …
Run Code Online (Sandbox Code Playgroud)

linux tomcat centos

2
推荐指数
1
解决办法
1万
查看次数

Sublime Text 2增加了额外的换行符.怎么解决?

当我使用Sublime Text 2(例如.css或.php文件)通过FTP打开某些文件时,ST2会在每行后添加额外的换行符.结果是大量不必要的空白区域使文件难以扫描并再次清理.

有人可以告诉我如何将首选项设置为打开文件时没有添加额外换行符的位置吗?

非常感激.

sublimetext2

2
推荐指数
1
解决办法
2150
查看次数

从外部脚本调用函数

我有2个脚本:

/home/bin/test.sh

#!/bin/bash
. /home/bin/test_functions.sh
test
Run Code Online (Sandbox Code Playgroud)

/home/bin/test_functions.sh

#!/bin/sh
test()
{
    echo "this is a test"
}
Run Code Online (Sandbox Code Playgroud)

我想从外部脚本调用该函数并在主脚本中执行它.然而,我一直在收到这些错误:

'home/bin/test_functions.sh: line 2: syntax error near unexpected token `
'home/bin/test_functions.sh: line 2: `test()
Run Code Online (Sandbox Code Playgroud)

我正在做什么可能有什么问题?

bash

2
推荐指数
1
解决办法
88
查看次数

Shell Bash脚本

我正在制作一个bash脚本.我必须得到3个变量

VAR1=$(cat /path to my file/ | grep "string1" | awk '{ print $2 }'
VAR2=$(cat /path to my file/ | grep "string2" | awk '{ print $2 }'
VAR3=$(cat /path to my file/ | grep "string3" | awk '{ print $4 }'
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果我写

echo $VAR1
echo $VAR2
echo $VAR3
Run Code Online (Sandbox Code Playgroud)

我可以正确看到价值观

但是当我尝试将它们写成这样的一行时

echo "VAR1: $VAR1 VAR2: $VAR2 VAR3: $VAR3"
Run Code Online (Sandbox Code Playgroud)

值来自$VAR3写入输出的开头,覆盖$VAR1和的值$VAR2

我希望我的解释很明确.有任何疑问请告诉我

感谢致敬.

兰伯特

linux bash shell awk

1
推荐指数
1
解决办法
39
查看次数

Awk/Bash将数字从行前移到行尾

我想将数字/数字字符串从行前移到行尾,输入示例:

123example
321example
34292example
Run Code Online (Sandbox Code Playgroud)

预期产量:

example123
example321
example34292
Run Code Online (Sandbox Code Playgroud)

bash awk

1
推荐指数
1
解决办法
93
查看次数

通过 shell 脚本执行 mongo 命令的问题

基于马特对这里提出的问题的回答

我试过下面的脚本

use sample

db.testCollection.insert({"result":1})
Run Code Online (Sandbox Code Playgroud)

但是,当我按照建议运行时,出现如下错误,并且记录被插入到默认数据库的集合中,而不是按预期插入“示例”数据库中。

[tmp]# mongo < output.js
connecting to: mongodb://127.0.0.1:27017
2018-03-21T14:54:52.713+0530 E QUERY    [thread1] SyntaxError: unterminated string literal @(shellhelp2):1:21
WriteResult({ "nInserted" : 1 })
bye
Run Code Online (Sandbox Code Playgroud)

请寻求帮助。

mongodb

1
推荐指数
1
解决办法
3882
查看次数

aclocal错误:'已在AC_CONFIG_FILES中注册;和/或$'\ r':找不到命令

我正在构建一个C automake项目。运行“ aclocal”显示以下错误。

 $ aclocal
 ' is already registered with AC_CONFIG_FILES./usr/src/ports/autoconf2.5/autoconf2.5-2.69-3.noarch/src/autoconf-2.69/lib/autoconf/status.m4:288: AC_CONFIG_FILES is 
 expanded from...
 configure.ac:890: the top level
 autom4te-2.69: /usr/bin/m4 failed with exit status: 1
 aclocal-1.15: error: echo failed with exit status: 1
Run Code Online (Sandbox Code Playgroud)

我在Windows 10上使用Cygwin。

从886行到结尾,configure.ac具有以下内容。

# ----------------------------------------------------------------------
# Create output files
#
echo $SLIM_VERSION > VERSION
AC_OUTPUT(Makefile \
      src/Makefile \
      src/genconfig \
      src/verifier/Makefile \
      src/utility/Makefile \
      src/test/Makefile \
      lib/Makefile \
      ext/Makefile \
      test/Makefile \
      test/system_check/Makefile \
      third_party/Makefile \
      third_party/zdelta-2.1/Makefile \
      third_party/google-perftools-1.8.3/Makefile \
      third_party/google-perftools-1.8.3/src/google/tcmalloc.h \
      third_party/google-perftools-1.8.3/src/windows/google/tcmalloc.h \
      doc/Makefile \ …
Run Code Online (Sandbox Code Playgroud)

c automake

1
推荐指数
1
解决办法
747
查看次数