小编cod*_*ter的帖子

BASH_VERSINFO与bash --version显示的不同

我试过复制/usr/local/Cellar/bash/4.4.19/bin/bash到/usr/local/bin/bash因为which bash节目/usr/local/bin/bash.

~/cat /etc/shells
/usr/local/Cellar/bash/4.4.19/bin/bash

~/bash --version
GNU bash, version 4.4.19(1)-release (x86_64-apple-darwin17.3.0)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


echo $BASH_VERSINFO
3
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

bash

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

使用awk在'cat'和'echo'命令之间有什么区别

这是test.file:

2017
2018
Run Code Online (Sandbox Code Playgroud)

这是我在终端尝试的:

$ echo 2 | awk '{ print 6 }'   
6
$ cat test.file | awk '{ print 6 }'
6
6
Run Code Online (Sandbox Code Playgroud)

我的问题是:

为什么echo两次不显示数字'6' cat?

bash shell awk

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

切片操作总是分配一个新对象吗?

我对切片操作感到困惑。

>>> s = "hello world"
>>> y = s[::]
>>> id(s)
4507906480
>>> id(y)
4507906480 # they are the same - no new object was created

>>> z = s[:2]
>>> z
'he'
>>> id(z)
4507835488 # z is a new object
Run Code Online (Sandbox Code Playgroud)

切片操作遵循什么分配规则?

python slice

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

如何在Bash脚本中显示两个文件的差异?

我正在尝试比较bash脚本中两个文件的内容.

local_file=$(cat my_local_file.txt)
remote_file=$(curl -s "http://example.com/remote-file.txt")

if [ local_file == remote_file ]; then
  echo "Files are the same"
else
  echo "Files are different. Here is the diff:"
  diff <(echo "$local_file") <(echo "$remote_file")
fi
Run Code Online (Sandbox Code Playgroud)

当我运行脚本时,我发现我有一个语法错误:

./bin/check_files.sh: line 8: syntax error near unexpected token `('
./bin/check_files.sh: line 8: `  diff <(echo "$local_file") <(echo "$remote_file")'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?如何从bash脚本中显示这两个字符串的差异?

bash diff

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

Bash脚本从变量添加参数

我正在研究一个Bash脚本,如果它检测到Java版本大于10,它将添加模块自定义.我似乎无法将自定义作为java命令的参数正确读取

#!/bin/bash


# Expect format:  java full version "10.0.1+10"
jver="$( java -fullversion 2>&1)"

IFS='.-_^+^"'
read -ra ADDR <<< "$jver"    # jver is read into an array as tokens separated by IFS


#java version < 10
if [ ${ADDR[1]} -lt 10 ]; then
    moduleCustomizations=""
else
    moduleCustomizations=("--illegal-access=warn" "--add-opens java.desktop/java.awt.color=ALL-UNNAMED" "--add-opens java.desktop/sun.font=ALL-UNNAMED" "--add-opens java.desktop/java.beans=ALL-UNNAMED" "--add-opens java.base/java.lang=ALL-UNNAMED" "--add-opens java.base/java.lang.module=ALL-UNNAMED" "--add-opens java.desktop/javax.swing=ALL-UNNAMED" "--add-opens java.desktop/java.awt=ALL-UNNAMED" "--add-opens java.desktop/sun.awt.image=ALL-UNNAMED" "--add-opens java.desktop/javax.accessibility=ALL-UNNAMED" "--add-opens java.desktop/sun.awt=ALL-UNNAMED" "--add-opens java.base/jdk.internal.module=ALL-UNNAMED" "--add-opens java.base/java.security.cert=ALL-UNNAMED" "--add-opens java.base/java.security=ALL-UNNAMED" "--add-opens java.base/java.net=ALL-UNNAMED" "--add-opens java.base/java.lang.ref=ALL-UNNAMED")

fi

set -x

java "${moduleCustomizations[@]}" …
Run Code Online (Sandbox Code Playgroud)

bash shell

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

Case语句没有捕获空字符串

我想检测是否传递了无参数或无效参数并打印帮助消息。一个空的参数单独检查是可能的,但不是那么优雅。

我的 bash 脚本如下所示:

COMMAND="$1"
shift
case "$COMMAND" in     
        loop)
            loop_
            ;;  
        ...            
        *)
            echo $"Usage: $0 {loop|...}"
            exit 1 
esac
Run Code Online (Sandbox Code Playgroud)

当没有参数传递时,什么都不执行;如果我通过“”,则会触发正确的情况。如果我$1直接使用而不是使用临时变量,那么它会按预期工作。

我什至尝试添加一个特定的案例,"")但无济于事。

bash shell switch-statement

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

基于分隔符在bash中拆分字符串

我有一个文件log_file,其中包含的内容

CCO O-MR1 Sync:No:3:No:346:Yes
CCO P Sync:No:1:No:106:Yes
CCO P Checkout:Yes:1:No:10:No
CCO O-MR1 Checkout(2.2):Yes:1:No:10:No
Run Code Online (Sandbox Code Playgroud)

我试图获取基于":"分隔符的4个字段我拥有的脚本是

#!/bin/bash
log_file=$1

for i in `cat $log_file` ; do
        echo $i
        field_a=`echo $i | awk -F '[:]' '{print $1}'`
        echo $field_a
        field_b=`echo $i | awk -F '[:]' '{print $2}'`
        echo $lfield_b
        ...
done
Run Code Online (Sandbox Code Playgroud)

但是此代码为field_a提供的值是错误的,它会根据""分隔符拆分该行.echo $ i也打印错误的值.

还有什么可以用来纠正这个问题?

bash split

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

分段错误 - 如何调试?

我的应用程序崩溃了,它在控制台上打印如下:

sh [366]:/ bin/sh:第1行:367分段错误(核心转储)./ myapp

我的问题是这里367表示什么?

我无法在任何地方找到核心转储文件.
任何线索如何在这种情况下调试分段错误?

linux debugging segmentation-fault

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

条件未经正确测试

每次我的Ubuntu机器醒来并进入睡眠状态时,我都会运行这个脚本.

#!/bin/sh
if [ "${1}" == "pre" ]; then
  # Do the thing you want before suspend here, e.g.:
  echo "we are suspending at $(date)..." > /home/albin/stuff/suspend_test
elif [ "${1}" == "post" ]; then
  # Do the thing you want after resume here, e.g.:
  echo "...and we are back from $(date)" >> /home/albin/stuff/suspend_test
else
  echo ".2..neither pre or post . $1 .   $(date)" >> /home/albin/stuff/suspend_test
fi
Run Code Online (Sandbox Code Playgroud)

这可以在输出文件中找到:

.2..neither pre or post . pre .   tis 11 sep 2018 20:44:42 CEST …
Run Code Online (Sandbox Code Playgroud)

syntax bash

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

Bash中的无条件do-done块

我echo在Bash脚本中有一个语句块,我需要管道到FTP命令.我有这个工作,但我需要无条件地做.

所以我编写了一个虚拟if语句,如下所示:

if [[ 1 -eq 1 ]]; then
  echo "..."
  # ...
fi | ftp -n
Run Code Online (Sandbox Code Playgroud)

我尝试了一个do ... done没有条件的直接块,但它不喜欢那个(Syntax error: got do, expecting Newline).

显然,这是有效的,但有没有办法消除if声明并do在Bash中有一个"匿名"或"无条件"的阻止?我必须将所有输出传递给FTP,但只输出该块的输出; 脚本的其余部分由我的脚本进行实际处理.

只是好奇.

bash shell

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