小编IGG*_*GGt的帖子

`语法错误:创建数组时“(”意外`

我有两台(Debian)Linux 服务器。我正在创建一个shell脚本。

在第一个上,我创建了一个数组:

#!/bin/bash
target_array=(
    "/home/user/direct/filename -p123 -r"
)
Run Code Online (Sandbox Code Playgroud)

这很好用。但是当我在另一台服务器上运行它时,我得到:

Syntax error: "(" unexpected
Run Code Online (Sandbox Code Playgroud)

据我所知,两台服务器都是一样的。任何人都可以解释为什么这不起作用?

如果我直接在终端中输入它就可以了??


看起来当我运行它时

sh scriptname.sh
Run Code Online (Sandbox Code Playgroud)

我收到错误,但如果我运行它

./scriptname.sh
Run Code Online (Sandbox Code Playgroud)

好像没问题。有什么不同?

bash array shell-script

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

HAProxy 是否支持记录到文件?

我刚刚在我的测试服务器上安装了haproxy。

有没有办法让它将日志写入本地文件,而不是系统日志?

这仅用于测试,所以我不想开始打开端口/用我的所有测试数据弄乱系统日志。

不幸的是,我能找到的唯一信息都是关于登录到系统日志服务器的。

我尝试使用:

log /home/user/ha.log local0
Run Code Online (Sandbox Code Playgroud)

在我的配置中。但这告诉我:

[ALERT] 039/095022 (9528) : sendto logger #1 failed: No such file or directory (errno=2)
Run Code Online (Sandbox Code Playgroud)

当我重新启动。所以我创建了文件touch /home/user/ha.log并重新启动,此时我得到:

[ALERT] 039/095055 (9593) : sendto logger #1 failed: Connection refused (errno=111)
Run Code Online (Sandbox Code Playgroud)

这是可能的,还是我必须配置 syslog 等才能查看我的测试数据?

logs haproxy

22
推荐指数
4
解决办法
8万
查看次数

在 Debian 12 上更改为 swappiness 重启后不会粘住

我最近开始将我的数据库服务器从 Debian 9 升级到 Debian 12。然而,Debian 12(实际上是 11)似乎很容易进行交换,而 Debian 9 从未这样做过。

因此,我想将 的值vm.swappiness从当前值 5 更改为 1,看看这是否会产生影响。

无论我看什么,都表明我只需将条目添加vm.swappiness = 1到文件末尾即可/etc/sysctl.conf。

我已经这样做了(并检查其中没有其他条目)并重新启动服务器几次,但每次它回来并告诉我仍然是vm.swappiness5。

我假设因此必须在其他地方设置此设置,但谷歌搜索它并没有帮助,到处都说它应该在/etc/sysctl.conf.

任何人都可以建议另一个可能设置的位置吗?

debian swap

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

mv 目录和内容到新目录

我有一个目录: /var/lib/mysql/test_db/ 其中包含构成test_db数据库的许多文件

我现在已经创建了一个新目录: /var/lib/mysql/data/

我正在尝试将test_db目录及其内容移动到data目录中。

我试过各种命令围绕

sudo mv /var/lib/mysql/test_db/ /var/lib/mysql/data/test_db/
Run Code Online (Sandbox Code Playgroud)

但我不断收到错误消息:

mv: cannot move /var/lib/mysql/test_db/ to /var/lib/msyql/data/test_db/: No such file or directory
Run Code Online (Sandbox Code Playgroud)

但如果我跑: ls -lah

我得到

drwxrwxrwx  2 root  root    32K Mar 27 15:58 test_db
drwxrwxrwx  3 mysql mysql  4.0K Mar 30 10:51 data
Run Code Online (Sandbox Code Playgroud)

据我所知,这意味着它们都是目录,因此都存在。

如您所见,我已更改了它们的权限 ( chmod 777 test_db),但这不起作用。

我错过了什么?

mv

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

循环遍历文件时,如何知道自己位于最后一行?

我有一个名为的文件,listing.txt 它包含如下数据:

1
2
3
4
5
Run Code Online (Sandbox Code Playgroud)

然后,我使用以下命令循环遍历文件并对每一行执行操作:

IFS=$'\n'
while IFS= read -r inc; do
    if [ $inc -eq 1 ]
    then
        echo "FIRST: $inc"
    else
        echo "MID: $inc"
    fi
done </home/user/listing.txt
Run Code Online (Sandbox Code Playgroud)

但我找不到检查它是否是最后一行的选项。如果我在最后一行,最好的查找方法是什么?

我见过许多讨论循环的页面,以及讨论从文件中获取最后一行的页面,但没有任何内容可以帮助我的循环知道它在最后一行。

shell-script

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

使用 `nohup` 在 Debian 服务器上导入 MySQL 转储

我正在尝试将 mysqldump 文件导入我的 mysql 数据库,但我与服务器的(腻子)连接在中途一直超时。

我尝试使用,nohup . . . . &但这似乎不起作用。

我的命令是

nohup sudo mysql -hlocalhost -P3306 -uxxxxxx -pxxxxxx < /var/lib/mysql/backups/dump.sql &
Run Code Online (Sandbox Code Playgroud)

我认为应该在后台运行它,并在我与服务器的连接中断后继续存在。但是,当我输入jobs以查看它是否正在运行时,它说:

    [1]   Stopped                 nohup sudo mysql -hlocalhost -P3306 -uxxxxx -pxxxxx < /var/lib/mysql/backups/dump.sql
Run Code Online (Sandbox Code Playgroud)

是我做错了什么,还是我完全误解了 nohup . . . . &

debian nohup mysql

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

将字符串拆分为路径和应用程序

如果我有一个字符串,例如

/home/user/a/directory/myapp.app 
Run Code Online (Sandbox Code Playgroud)

要不就

/home/user/myapp.app 
Run Code Online (Sandbox Code Playgroud)

how can I split this so that I just have two variables (the path and the application)

e.g.

path="/home/user/"
appl="myapp.app"
Run Code Online (Sandbox Code Playgroud)

I've seen numerous examples of splitting strings, but how can I get just the last part, and combine all the rest?

bash debian split

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

如何从终端窗口启动 Wine 中的应用程序

我在 Linux 服务器上运行 Wine 以便运行一些旧的 Windows 应用程序。

我现在需要编写一个脚本来确保它们正在运行。

是否可以创建到服务器的 ssh 连接并启动应用程序?

例如,如果我在桌面上,打开一个终端窗口并运行

wine "Z:\home\user\Desktop\application"
Run Code Online (Sandbox Code Playgroud)

应用程序打开。但是如果我通过 SSH 连接并运行

wine "Z:\home\user\Desktop\application"
Run Code Online (Sandbox Code Playgroud)

我得到:

Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly.
err:systray:initialize_systray Could not create tray window
Application tried to create a window, but no driver could be loaded.
Make sure that your X server is running and that $DISPLAY is set correctly. 
Run Code Online (Sandbox Code Playgroud)

我假设我需要告诉它从哪里 …

linux debian wine

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

`/usr/share/zoneinfo` 多久更新一次?

我正在 MySQL 上安装时区表,这些表是从/usr/share/zoneinfo我的 Debian 服务器上生成的。

但注释中有一点是关于确保每当更新 zoneinfo 文件时我都会保持它们是最新的。

我用谷歌搜索过,但找不到问题的答案:

How often is `/usr/share/zoneinfo` updated? 
Run Code Online (Sandbox Code Playgroud)

Linux 操作系统是每次更新还是不经常更新?

debian timezone

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

bash 使用通配符计算路径中的文件并分配给变量

我缺少什么?

我想找出目录中有多少文件与给定模式匹配并将其分配给变量。

如果我直接在命令行上输入它,它就可以正常工作

ls /backups/system\ db\ files/temp/daily/backup_filename_202203*.tar.gz | wc -l
Run Code Online (Sandbox Code Playgroud)

(注意,*是创建备份的日期,例如01、02等03)

但一旦我将它添加到我的 bash 脚本中,它就会失败。

到目前为止我有:

base_dir="/backups/system\ db\ files/temp" 
sub_dir="${base_dir}/daily"
filename_base="backup_filename_"
Run Code Online (Sandbox Code Playgroud)

然后我尝试运行:

counter=$(ls ${sub_dir}/${filename_base_}202203*.tar.gz | wc -l)
Run Code Online (Sandbox Code Playgroud)

或带引号:

counter=$(ls "${sub_dir}/${filename_base_}202203*.tar.gz" | wc -l)
Run Code Online (Sandbox Code Playgroud)

第一个失败,因为它尝试根据空格分割它。第二个不扩展*来查找通配符。

我尝试过引用其中的一些内容,例如

counter=$(ls "${sub_dir}/${filename_base_}"202203*.tar.gz | wc -l)
Run Code Online (Sandbox Code Playgroud)

但它再次忽略了通配符。

我一直在寻找,但我一生都找不到一种方法来获取匹配文件的总数。

bash shell-script

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

增加从文件中提取的值

我有一个正在编写的 cron,它将每小时重复一次,我需要一种简单的方法将计数器从上次运行传递到下一次运行。

我的计划是在最后将数字添加到文件中,然后在开头调用它,例如

在第一次 cron 运行结束时:

INC_COUNT=1
echo $INC_COUNT > inc_counter.txt
Run Code Online (Sandbox Code Playgroud)

然后在第二次运行开始时:

INC_COUNT_FILE="inc_counter.txt"
OLD_INC_COUNTER=$(cat "$INC_COUNT_FILE")    
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但现在我需要增加这个数字。我试过:

NEW_INC_COUNTER="$OLD_INC_COUNTER"+1
NEW_INC_COUNTER="$OLD_INC_COUNTER+1"
Run Code Online (Sandbox Code Playgroud)

两者都没有奏效。增加这个数字的最佳方法是什么?

shell arithmetic variable

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

'&gt;' 和 '-gt' 之间的区别

这些有什么区别:

SEC=$(mysql -hxxx -Pxxx -uxxx -pxxx -se "SELECT Seconds FROM tablename")

SEC=100
Run Code Online (Sandbox Code Playgroud)

两者都返回相同的结果 (100)。但是当我测试它时:

if [ ${SEC} > 1 ]
then
    echo "SEC GT 1"
else
    echo "SEC LT 1"
fi
Run Code Online (Sandbox Code Playgroud)

第一个返回:

"SEC GT 1"
Run Code Online (Sandbox Code Playgroud)

第二个返回:

"SEC LT 1"
Run Code Online (Sandbox Code Playgroud)

但是,如果我将其更改为:

if [ ${SEC} -gt 1 ]
Run Code Online (Sandbox Code Playgroud)

那么结果是相反的。

我假设它与数据类型有关,并且我大概需要cast其中一个来获得相同的结果。

只是目前它搞砸了我的测试,因为我必须记住IF每次都更改该部分。

shell test

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

在 bash 中,从变量中删除最后一个字符

我有以下代码:

testval="aaa_bbb_ccc," 
testval+="_ddd"
echo ${testval}
Run Code Online (Sandbox Code Playgroud)

但是,我需要去掉“ ccc ”后面的逗号。${testval}在我添加“ _ddd ”之前,它将始终是最后一个字符。可能还有其他逗号需要保留在字符串中。

但到目前为止,我找不到任何有效的方法。

例如

testval="aaa_bbb_ccc," ; 
testval=${testval} | rev | cut -c 2- | rev ; testval+="_ddd" ; 
echo ${testval}
Run Code Online (Sandbox Code Playgroud)

或者

testval="aaa_bbb_ccc," ; 
testval=${testval} | sed 's/.$//' ; testval+="_ddd" ; 
echo ${testval}
Run Code Online (Sandbox Code Playgroud)

两者都导致:

aaa_bbb_ccc,_ddd
Run Code Online (Sandbox Code Playgroud)

我也试过:

testval="aaa_bbb_ccc," ; 
testval=$(${testval} | rev | cut -c 2- | rev) ; 
testval+="_ddd" ; 
echo ${testval}`
Run Code Online (Sandbox Code Playgroud)

和

testval="aaa_bbb_ccc," ; 
testval=$(${testval} | sed 's/.$//') ; 
testval+="_ddd" ; 
echo ${testval}
Run Code Online (Sandbox Code Playgroud)

两者都导致:

-su: {testval}: command not found**
Run Code Online (Sandbox Code Playgroud)

没有等效的或 …

bash shell-script

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

标签 统计

debian ×5

bash ×4

shell-script ×4

shell ×2

arithmetic ×1

array ×1

haproxy ×1

linux ×1

logs ×1

mv ×1

mysql ×1

nohup ×1

split ×1

swap ×1

test ×1

timezone ×1

variable ×1

wine ×1