标签: bash

如何使用 SSH 隧道编写数据库迁移脚本?

我正在尝试sync.sh为我们的网站创建一个与我们不太理想的版本控制相协调的脚本。此脚本会将数据库的实时副本迁移到我们的开发环境和其他一些东西。我在 mysql 迁移部分遇到了问题。

该脚本在开发机器上运行。 remote是现场主持人。

# --------------
# database

# ssh tunnel
ssh -L 3307:remote:3306 user@remote

# mysql dump
mysqldump -u someuser -h remote -P 3307 -p"p4ssw0rd" db > localfile.sql

# somehow close ssh tunnel ???

# populate local db with sql dump file
mysql -ulocal db < localfile.sql

# -----------------
# other sync stuff
# ...
Run Code Online (Sandbox Code Playgroud)

当我只运行脚本的 mysql 部分时,我得到了这个输出:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Enter password: 
Run Code Online (Sandbox Code Playgroud)

我们已经设置了 ssh 密钥,我可以正确地 ssh …

ssh bash mysql shell-script ssh-tunnel

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

bash 中的 cd &lt;nonexistent_directory&gt; 导致 cd 到不同的目录?

好的,所以我已经使用 Linux 18 年了,从来没有见过或听说过这样的事情:

starting-forth$ ls
ch01/  ch02/  ch04/  ch05/  ch06/  text/
starting-forth$ cd ch07  # A directory I thought I might exist, but didn't
ch04
ch04$
Run Code Online (Sandbox Code Playgroud)

哇?!好的,只是为了确保:

ch04$ pwd
/home/m/learn/forth/starting-forth/ch04
Run Code Online (Sandbox Code Playgroud)

我的 shell 是 bash,在虚拟终端 [LilyTerm,确切地说],在 XFCE 会话中,在 Manjaro Linux 上。我认为我没有进行任何奇怪的自定义,并且整个系统相当新(2014 年 10 月在新笔记本电脑上首次安装)。

那么,任何人都知道是什么导致了这种情况?

更新:我之前没有想到的一个事实(尽管我不知道为什么会如此)是这发生在 Git 工作目录中。

更新 2:显然,只要存在名称相同的现有目录,除了最后一个字符(或两个字符?),作为我尝试 cd 到的不存在目录时,就会发生这种行为。例如:

[tmp]$ mkdir dxx17903
[tmp]$ cd dxx17907
dxx17903
[tmp]$ cd dxx179035
dxx17903
[dxx17903]$ cd ..
[tmp]$ cd dxx179005
bash: cd: dxx179005: No such file or directory
[tmp]$ …
Run Code Online (Sandbox Code Playgroud)

linux bash

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

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万
查看次数

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

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

-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万
查看次数

Tee 脚本以在其自身内归档

我熟悉使用 tee,我知道我可以简单地记录输出

script.sh | tee file.log
Run Code Online (Sandbox Code Playgroud)

但是,我想要一个无缝的用户界面。有没有办法在 script.sh 中像上面那样运行 tee ?在这个脚本中,有数百个回声和许多其他正在运行的脚本,很难将每个脚本单独附加到文件中。

bash tee

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

标签 统计

bash ×10

linux ×5

bash-scripting ×3

shell ×2

shell-script ×2

c ×1

centos ×1

command-line ×1

cron ×1

email ×1

finger ×1

globbing ×1

macos ×1

mysql ×1

ssh ×1

ssh-tunnel ×1

tee ×1

ubuntu ×1