标签: bash

Bash:从历史中执行一系列命令

如何从我的 bash 历史记录中执行一系列命令?例如,如果我想在我的 bash 历史记录中执行编号为 34 到 42 的命令,我尝试过以下操作:

for n in $(seq 34 42); do
   exec \!$n;
done
Run Code Online (Sandbox Code Playgroud)

但这并不能解决问题,是吗。有任何想法吗?

谢谢!

linux shell bash

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

ssh 配置中的正则表达式匹配

我有一堆名称为 srv1.domain.com、srv2.domain.com、...、srv50.domain.com 的服务器

我希望能够通过以下方式连接到这些服务器 ssh srv1

我不想将 50 个配置条目放到我的 .ssh/config 中,例如

HOST srv1
HOSTNAME srv1.domain.com
USER amac
IdentityFile /home/amac/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

我喜欢的是正则表达式匹配,它允许我写一些类似的东西

HOSTNAME (srv[0-9]*).domain.com
HOST \1
USER amac
IdentityFile /home/amac/.ssh/id_rsa
Run Code Online (Sandbox Code Playgroud)

这可能吗?也许通过创建一个 bash 别名将“srv(.*)”的所有实例转换为 srv\1.domain.com,其中 \1 对应于正则表达式匹配的括号中的子字符串?

谢谢。

ssh configuration bash regular-expressions

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

在 bash 脚本中回答交互式问题

我有一个支持奇怪的“ssh”的设备。它不支持密钥身份验证,我的问题是我不知道如何提供用户名和密码(-l 或 user@host 不起作用)。它在连接后要求输入登录名和密码,如下所示:

zeratul@antioch:~$ ssh 1.2.3.4

Please login: user
password : 
Login incorrect
Run Code Online (Sandbox Code Playgroud)

甚至可以从shell脚本中做到这一点还是我可以忘记它?

提前致谢。

ssh shell bash

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

使用 bash 运行 SQL*Plus 会导致编码错误

我在 bash 中运行 SQL*Plus 时遇到问题。这是我的代码

#!/bin/bash

#curl http://192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql > script.sql
wget -O script.sql 192.168.168.165:8080/api_test/xsql/f_exp_order_1016.xsql
set NLS_LANG=_.UTF8
sqlplus /nolog << ENDL
connect login/password 
set sqlblanklines on
start script.sql
exit
<<endl
Run Code Online (Sandbox Code Playgroud)

我从我们的内网下载插入语句,将其放入 sql 文件并通过 SQL*Plus 运行它。这工作正常。我的问题是,当我保存文件 script.sql 时,我的编码出错了。所有特殊字符(如 íáš?)都已损坏,这导致将错误的字符插入到我的数据库中。该文件的编码是 UTF-8,我们内网的 XSQL 页面上也设置了 UTF-8。所以我真的不知道哪里有问题。

也欢迎任何关于我的脚本的建议,我是 Linux 脚本的新手:-)

oracle linux bash sqlplus

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

从任何位置运行已编译的 c 程序

快速提问。编译程序后,我总是必须通过在名称前加上 ./ 来明确告诉它从当前目录运行。例如$ ./testprog -argument1

有没有办法设置某种别名,允许我简单地通过说来调用它$ testprog -argument1,基本上允许我从任何位置运行程序?

shell bash path

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

/usr/bin/ 和 /usr/local/bin 之间的 linux PATH 问题

环境:

  • linux 新手 :)
  • tmux 1.1 是使用 apt-get 安装的
  • 从源代码下载、配置、构建和安装 tmux 1.6
  • tmux 1.1 已使用 apt-get 删除

问题:

  • 从路径运行 tmux 尝试从 /usr/bin 而不是 /usr/local/bin 运行它

迪茨:

    wget http://iweb.dl.sourceforge.net/project/tmux/tmux/tmux-1.6/tmux-1.6.tar.gz
    tar xvf tmux-1.6.tar.gz
    cd tmux-1.6/
    sudo apt-get install libevent-dev
    sudo apt-get install libncurses5-dev
    ./configure
    make
    make install
    ./tmux #version 1.6 worked perfectly
    cd ~
    tmux #ran old version as expected
    sudo apt-get remove tmux
Run Code Online (Sandbox Code Playgroud)

当我尝试从 ~ 运行它时的结果:

    ~$tmux
    -bash: /usr/bin/tmux: No such file or directory
    ~$which tmux
    /usr/local/bin/tmux
    ~$echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
Run Code Online (Sandbox Code Playgroud)

linux ubuntu bash path

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

暂时将 STDOUT 重定向到另一个文件描述符,但仍会重定向到屏幕

我正在制作一个在内部执行一些命令的脚本,这些命令显示一些输出STDOUTSTDERR以及,但这没问题)。我需要我的脚本生成一个 .tar.gz 文件到STDOUT,所以脚本中执行的一些命令的输出也会转到STDOUT,这以输出中无效的 .tar.gz 文件结束。

因此,简而言之,可以将第一个命令输出到屏幕(因为我仍然想看到输出)但不能通过STDOUT? 此外,我想保持STDERR原样,以便那里只显示错误消息。

我的意思的一个简单例子。这将是我的脚本:

#!/bin/bash

# the output of these commands shouldn't go to STDOUT, but still appear on screen
some_cmd foo bar
other_cmd baz

#the following command creates a tar.gz of the "whatever" folder,
#and outputs the result to STDOUT
tar zc whatever/
Run Code Online (Sandbox Code Playgroud)

我试过搞乱exec文件描述符,但我仍然无法让它工作:

#!/bin/bash

# save STDOUT to #3
exec 3>&1

# the output of these commands should go to …
Run Code Online (Sandbox Code Playgroud)

linux shell bash redirection stdout

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

自看门狗脚本

有没有人写过一个自我看门狗脚本并且可以分享它的解决方式?我在其中一台路由器上安装了 DD-WRT,并且只能制作一个启动脚本。问题是跑不起来。如果我通过 telnet 登录并手动启动它,效果很好。所以我需要添加一个 cron 规则来运行它,但不能多次运行。我正在考虑使用:

if [`ps | grep [c]ustom.sh` -gt 1]; then
    exit;
else
    ...
fi
Run Code Online (Sandbox Code Playgroud)

你知道有什么其他方法可以做到这一点吗?

scripting linux bash watchdog

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

如何在 Unix 上操作带重音的文件?

在经历了许多版本和托管平台的 CMS 上,我们刚刚遇到了一个带重音的图像文件,它的 url 无法正常工作。所以我 ssh 到盒子上并试图重命名它。

但是,我不知道如何正确输入它的名称。例如,我知道如果一个文件被调用,my file.txt你会做类似的事情,mv my\ file.txt my_new_file.txt但你如何移动一个名为 的文件café.txt

最后,我使用了通配符并使用了,mv caf*.txt cafe.txt但我仍然想知道为什么这个带重音的图像首先不起作用,以及在 unix 上处理它的正确方法是什么。

unix bash

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

以另一种最快的方式复制并替换到文件夹 - linux bash

我有一个三个文件夹:coreproject并与里面的许多文件合并。我想删除merge文件夹内的所有文件和文件夹(包括dot文件),然后将core文件夹中的所有文件(包括dot文件)复制到merge文件夹,同时将project文件夹下的所有文件都合并merge文件。

情况

  1. 如何从特殊文件夹中删除所有文件和文件夹(包括点文件),而不删除它们?(rm -rf /path/to/folder/*没有删除文件和文件夹。)
  2. 将所有文件从特殊文件夹递归复制(包括和不合并和替换)到另一个文件夹(包括点文件)的最快方法是什么?( tar -cf my.tar path/; tar -xf my.tar)

我正在使用 tar,但文件太多,我需要更快的方法。

linux bash cp

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