标签: bash

什么是`[`命令?

我已经从Cygwin和在Linux中看到的[指挥下/bin。每当我运行它时,我都会收到一条错误消息:missing ].

我一直不明白这个命令的作用,我只是有一天发现它想知道它的作用(以及它是否有用)

注意:我会检查man条目以获得答案,但遗憾的是,其中没有条目[

linux cygwin bash

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

仅当端口空闲时才执行命令的 Bash 脚本

嗨,我有一个 bash 脚本,它需要根据端口 80 是否已在使用来有条件地执行几行代码:

sudo git fetch origin;
sudo git checkout master;
sudo git pull;
Run Code Online (Sandbox Code Playgroud)

--- 如果端口 80 打开

echo Starting Meteor;
export LC_ALL=C;
export ROOT_URL=$ROOT_URL;
sudo meteor --port 80;
Run Code Online (Sandbox Code Playgroud)

- - 别的

echo Meteor already running;
Run Code Online (Sandbox Code Playgroud)

然后作为顶部的樱桃,因为 Meteor 是一个长时间运行的进程,我如何让它在后台运行并退出脚本?(我试过 nohup 和 &,但我不知道最佳做法是什么?)

非常感谢

bash ubuntu conditional-statements

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

如何在 Linux 上以其他用户身份运行命令?

我可以访问一个 linux 服务器,在那里我可以在没有密码的情况下像这样 sudo 到 'foo':

sudo su - foo
Run Code Online (Sandbox Code Playgroud)

一旦我成为 'foo' 用户,我就可以运行这样的脚本:

/dir/foo_user_script.sh
Run Code Online (Sandbox Code Playgroud)

'foo_user_script' 只能由 foo 用户而不是我的用户执行。因此,我可以通过首先更改为“foo”用户然后运行脚本来运行脚本。

但是,我正在尝试使用 Java SSH 客户端ganymed自动化一些流程。Ganymed 的 faq 建议运行多个命令,我应该使用如下结构:

Session.execCommand("echo Hello && echo again")
Run Code Online (Sandbox Code Playgroud)

我试过这样的事情,但第二个命令(foo_user_script)没有执行:

Session.execCommand("sudo su - foo && /dir/foo_user_script.sh")
Run Code Online (Sandbox Code Playgroud)

我认为这不起作用,因为 su 启动了一个新的 shell。

我有什么办法可以在单个命令中运行 /dir/foo_user_script.sh 脚本吗?

注意:
“sudo -l”向我展示了这个:

(root) NOPASSWD: /bin/su - foo
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

linux ssh bash shell command-line

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

如何旋转类似于 logrotate 的枚举文件名?

我有几个文件,比如 map-0.jpg(最新)、map-1.jpg、map-2.jpg、...、map-9.jpg(最旧)。现在我的 cronjob 从互联网上下载了一张新图片,并将其保存为 map-0.jpg。但是,所有其他文件都应重新枚举(0 -> 1、1 -> 2 等)。就我而言,数字 9 可以丢弃。

是否有一个方便的 bash 命令可以像 logrotate 一样枚举我的文件?

感谢帮助!

linux bash logrotate

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

将两个命令的输出管道化为一个

是否可以在 unix/bash 中将两个命令的输出通过管道传输到另一个命令?

我尝试运行以下命令,该命令成功运行了两个命令,但第一个通过管道传输到 stdout,第二个通过管道传输到 less。

$ grep 40515575 * && zgrep 40515575 * | less
Run Code Online (Sandbox Code Playgroud)

linux unix bash

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

当我通过 ssh 运行非交互式命令时,为什么我的 .bashrc 会被读取

我在我的每个 bash 配置文件 ( ~/.bashrc, ~/.bash_profile, ~/.profile)前面加上了echo NAME_OF_FILE,即当我在~/.bashrc.

令我感到困惑的是,当我通过 ssh 运行命令时,为什么我得到并指出 ~/.bashrc 被包含在内。例如,如果我这样做:

ssh localhost echo hi
Run Code Online (Sandbox Code Playgroud)

我得到

.bashrc
hi
Run Code Online (Sandbox Code Playgroud)

为什么~/.bashrc在这种情况下采购?它不应该被引入,因为它应该运行一个非交互式 bash 会话吗?

事实上,ssh localhost tty让我得到一个“不是 tty”(前面是“.bashrc”,表明它~/.bashrc仍然来自)。

我已经将grep所有配置文件都~/.bashrc明确地用于命令采购,但没有人对此进行解释。

(我只有tty -s && shopt -q login_shell && [[ -r ~/.bashrc ]] && . ~/.bashrc在我的文件中,.bash_profile所以即使在交互式登录 shell 中我也能得到 '.bashrc',但这并不能解释 ssh 问题——我可以将其注释掉,我仍然得到与上述 ssh 示例相同的行为)

我该如何调试?

linux ssh terminal bash shell

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

如何在 bash shell 中禁用 `alt-numkey`

我可以通过按在 Chrome OS 中的应用程序之间切换alt-N,其中 N 是我的应用程序在状态栏上的位置。有用!

但是当我在我的 Nitrous.io 盒子的 bash shell 中时,按下alt-N以跳转到不同的应用程序会给 bash 一个命令:(arg: N).

(arg: N)命令在 bash 中做什么?五分钟的搜索教会了我很多热键,但没有alt + 数字键

我可以禁用它吗?

bash readline bashrc inputrc

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

命令“:() { :|:& }; 是什么意思?:”在外壳中?

我刚刚在网上的一个 linux 论坛上遇到了这个命令,作者警告说不要为了好奇而尝试这个命令。于是我的好奇心来了。命令“:() { :|:& }; 是什么意思?:”在外壳中?

linux bash

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

如何检查目录是否受 ​​svn 版本控制?

从 linux bash 脚本中,如何验证某个目录是否受 ​​svn 版本控制?我正在使用 svn 版本 1.7.9。

当我尝试以下操作时

pushd ${WD}; svn info; popd
Run Code Online (Sandbox Code Playgroud)

并检查错误代码我总是得到零,因为popd成功,即使svn info返回错误。如何通过以下方式对目录进行检查?

if [ ... ]; then
    echo "Directory ${WD} not under version control"
fi
Run Code Online (Sandbox Code Playgroud)

linux bash svn

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

Shell 脚本:ssh 到远程机器,然后退出:'exit' 不起作用

我有以下类型的 shell 脚本:

#!/bin/bash

ssh mylogin@myremotemachine.com
echo "Hi"
exit
Run Code Online (Sandbox Code Playgroud)

我在本地运行它以在远程服务器上执行某些操作(由“echo“Hi”表示)。但是,当我运行它时,我在远程服务器上看到了提示——因此没有执行“退出”命令。当我在远程提示上手动输入“退出”时,我看到“连接到 myremotemachine.com”关闭,然后 “嗨”。如何设置 shell 脚本以使其正确退出并向我显示我执行它的(本地)提示?

https://unix.stackexchange.com/questions/89747/ssh-exits-after-quit-case-in-bash-scriptssh 和 shell 通过 ssh:如何退出?似乎有些相关,但我无法适应那里提出的想法。/

更新

以下,不是那么最小的版本导致Unmatched '..

#!/bin/bash

date=`date "+%Y-%m-%d"`
rsync -acxzP --delete --link-dest=/u3/mylogin/backup/old_backup /home/mylogin mylogin@myremotemachine.com:/u3/mylogin/backup/$date\_backup
ssh mylogin@myremotemachine.com bash -c "'
rm -f /u3/mylogin/backup/old_backup
ln -s $date\_backup /u3/mylogin/backup/old_backup
exit
'"
Run Code Online (Sandbox Code Playgroud)

如果我删除此代码段中的双引号,我会得到:bash: -c: option requires an argumentdate: Undefined variable.

ssh bash shell command-line exit

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