我试过复制/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)
我该如何解决?
这是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?
我对切片操作感到困惑。
>>> 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)
切片操作遵循什么分配规则?
我正在尝试比较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脚本,如果它检测到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 脚本如下所示:
COMMAND="$1"
shift
case "$COMMAND" in
loop)
loop_
;;
...
*)
echo $"Usage: $0 {loop|...}"
exit 1
esac
Run Code Online (Sandbox Code Playgroud)
当没有参数传递时,什么都不执行;如果我通过“”,则会触发正确的情况。如果我$1直接使用而不是使用临时变量,那么它会按预期工作。
我什至尝试添加一个特定的案例,"")但无济于事。
我有一个文件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也打印错误的值.
还有什么可以用来纠正这个问题?
我的应用程序崩溃了,它在控制台上打印如下:
sh [366]:/ bin/sh:第1行:367分段错误(核心转储)./ myapp
我的问题是这里367表示什么?
我无法在任何地方找到核心转储文件.
任何线索如何在这种情况下调试分段错误?
每次我的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) 我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,但只输出该块的输出; 脚本的其余部分由我的脚本进行实际处理.
只是好奇.