标签: bash

messages.sh:第 29 行:[:缺少`]'

我不知道这是一件坏事,还是意味着什么。我的脚本似乎仍然可以正常工作,但我应该修复它吗?

#!/bin/sh
#This script will send text and maybe images to other computers via ssh and scp.
#Configuration files in same folder

source /Users/jacobgarby/Desktop/messaging/messages.cfg
TIME=$(date +"%H:%M:%S")
CONNECTED[0]="mainmini@192.168.1.65"

if [ -d messages.log ]; then
    :
else
    touch messages.log
fi

read MSG

if [ "$MSG" == "!help" ]; then
    echo ; echo "!clear   Clear's your personal chat log."
    echo "!ban [usrname]    Prevents a user from entering this chat IN DEV."
else
    echo "$TIME | $USER | $MSG" >> messages.log; echo   >> messages.log; …
Run Code Online (Sandbox Code Playgroud)

bash bash-scripting

6
推荐指数
2
解决办法
8315
查看次数

如何同时进行 gzip 和 scp

我有一个文件,我想在其中压缩并同时使用 scp 传输到另一台主机。

我尝试执行以下命令但失败了。我不介意稍后拉上拉链和 scp,但我只想知道我哪里弄错了

使用管道我错了吗?在这里?

-bash-3.2$ gzip -c aum.dmp | scp oracle@192.168.0.191:/export/home/oracle/aum.dmp.gz
Usage: scp [-pqrvBC46] [-F config] [-S program] [-P port]
           [-c cipher] [-i identity] [-o option]
       [[user@]host1:]file1 [...] [[user@]host2:]file2
Run Code Online (Sandbox Code Playgroud)

问候, 菜鸟

centos bash shell ubuntu bash-scripting

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

为什么“exec non-existent-file”在源脚本中退出shell?

的文档exec说,如果当前 shell 是非交互式的并且execfail没有设置选项,它会在出错的情况下退出 shell 。

我注意到交互式 bash shell 中有一个奇怪的行为,但我无法用文档解释。这个命令

exec non-existent-file
Run Code Online (Sandbox Code Playgroud)

产生一条错误消息,并且 shell 保持活动状态,正如预期的那样。但是如果我将相同的命令放入一个文件和source那个文件中,当前的 shell 将被失败的 exec 退出。

有人可以帮助我理解为什么会发生这种情况吗?

bash

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

bash - 从函数返回数组并显示内容

经过一些 bash 自学和试验,我坚持从函数返回一个数组,并且我一生都看不到我的错误。

简而言之,这应该/必须做的是使用具有从文件中读取值/字符串的函数,返回一个数组:

  • 声明一个数组:clients
  • 将函数的返回数组分配给数组客户端
  • 显示阵列客户端

在我看来,该函数似乎读取整个文件而不是逐行读取,从而将所有字符串放入数组中的单个单元格中,我不确定如何将 clients[0] 显式显示为 $(clients[0] ]) 在 bash 代码中失败

如果通过某种方式我做错了什么,也请指出这一点或任何关于优化这一点的建议

#!/bin/bash
readArray(){
        local array=()
        local i=0;
        local j=0
        while IFS= read -r LINE  && [[ -n "$LINE" ]] ; do 
                array[$((i++))]+=${LINE}; # Append line to the array
                ((j++))
        done < "$1";
        rtr=${array[@]}
}
string="/home/cybex/openvpntest/openvpn.log"
declare -a clients
#sed -i '/^$/d' $string
clients=$(readArray "$string")
echo "${clients[@]}"

echo -e "array not empty, displaying array contents\n"

for i in "${!clients[@]}"; do 
  echo "$i: ${clients[$i]}"
done
echo -e …
Run Code Online (Sandbox Code Playgroud)

linux bash

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

将 grep 输出保持在一行上?

我有一个非常简单的问题要问你们。在浏览了文档和此处的站点后,我想知道是否可以防止 grep 在同一行上输出每个匹配项。

在我的示例中,我需要采用\xeb\x1a\x5e\x31\xc0\x88\x46\x07...等格式的字符串。我grep -oP "x\K(\S\S)")用来获取每个十六进制数字。

输出是正确的,但是每个匹配项都在自己的行上。这是一个问题,因为我需要将此输出提供给另一个程序。再说一次,有没有办法在没有任何类型的填充的情况下连续放置每个匹配项?

linux bash grep

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

如何从终端绘制标准输入?

我有一堆二进制文件输出如下数据:

-0.002019
-0.000790
0.000158
0.001539
Run Code Online (Sandbox Code Playgroud)

这只是一堆数字,我想在 y 轴上绘制在 x 轴上具有相等间距的数字。

输出实际上有几千行长。

我需要一种简单的方法将它传递给绘制它的东西,如下所示:

./program_dumping_numbers | ??? # a simple window of the plot pops up!
Run Code Online (Sandbox Code Playgroud)

linux bash

6
推荐指数
2
解决办法
4691
查看次数

如何将 shell 脚本的输出作为 cron 作业邮寄

我创建了一个运行 shell 脚本的 cron 作业。我希望 shell 脚本运行并捕获它的输出,并在完成后通过电子邮件发送。到目前为止,这是我所拥有的,但邮件正文是空的。

我已经尝试了以下所有方法:

/root/myscript.sh | tee output.txt | mail -s "Email subject" me@mymail.com

/root/myscript.sh | tee output.txt | mail -s "Email subject" me@mymail.com &> /dev/null

/root/myscript.sh | tee output.txt && mail -s "Email subject" me@mymail.com < output.txt &> /dev/null

/root/myscript.sh > tee output.txt && mail -s "Email subject" me@mymail.com < output.txt &> /dev/null
Run Code Online (Sandbox Code Playgroud)

所有这些都正常运行,但它们会产生一封空正文的电子邮件。运行脚本确实会在 stdout 上产生输出。

linux email bash cron bash-scripting

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

“其他”手指(/etc/passwd 中的 GECOS 字段)

在文件中/etc/passwd我们有所谓的GECOS fields(代表“通用电气综合操作系统”),即:

username:password:userid:groupid:gecos:home-dir:shell 
Run Code Online (Sandbox Code Playgroud)

其中GECOS分为:

:FullName,RoomAddress,WorkPhone,HomePhone,Others:
Run Code Online (Sandbox Code Playgroud)

并被Others分成任意多的逗号:

:FullName,RoomAddress,WorkPhone,HomePhone,Other1,Other2,Other3:
Run Code Online (Sandbox Code Playgroud)

man chfn页面中可以阅读:

另一个字段用于存储其他应用程序使用的记帐信息。

现在,应用程序开发人员(我很感兴趣C languagesystem calls和/或bash script),这就是抓住这个信息的最佳方式?

仅考虑Bash环境,鉴于该finger命令无法显示others字段(或者至少我不知道如何显示),还有哪些其他命令可以显示?我知道这chfn不仅是展示,而且是允许它们被改变。如果只是将它输出到stdout怎么办?

linux bash shell-script c finger

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

如何在文件名中同时扩展变量名和通配符?

我有一个 bash 脚本,其中$DIR是一个可能包含空格的目录名。

这个:

rm "$DIR/*.MOV"
Run Code Online (Sandbox Code Playgroud)

给出错误“没有这样的文件或目录”。没有字面上命名为“*.MOV”的文件;我希望*扩展为多个参数 - 每个匹配的文件名一个。

例如:

rm some\ folder/foo.MOV some\ folder/bar.MOV
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

bash globbing

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

如何通过绝对路径运行 bash 脚本?

我有一个文件:

/Users/danylo.volokh/test/test_bash_script.sh
Run Code Online (Sandbox Code Playgroud)

内容很简单:

#!/usr/bin/env bash
echo "-- print from script"
Run Code Online (Sandbox Code Playgroud)

我在文件夹“danylo.volokh”中

此命令运行良好:

Danilos-MacBook-Pro:~ danylo.volokh$ test/test_bash_script.sh 
-- print from script
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用绝对路径运行,则会出现错误:

Danilos-MacBook-Pro:~ danylo.volokh$ /test/test_bash_script.sh 
-bash: /test/test_bash_script.sh: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想从任何文件夹运行具有绝对路径的命令并获取要执行的脚本。

linux bash shell command-line macos

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

标签 统计

bash ×10

linux ×6

bash-scripting ×3

shell ×2

c ×1

centos ×1

command-line ×1

cron ×1

email ×1

finger ×1

globbing ×1

grep ×1

macos ×1

shell-script ×1

ubuntu ×1