我已经从Cygwin和在Linux中看到的[指挥下/bin。每当我运行它时,我都会收到一条错误消息:missing ].
我一直不明白这个命令的作用,我只是有一天发现它想知道它的作用(以及它是否有用)
注意:我会检查man条目以获得答案,但遗憾的是,其中没有条目[
嗨,我有一个 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 和 &,但我不知道最佳做法是什么?)
非常感谢
我可以访问一个 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)
谢谢您的帮助!
我有几个文件,比如 map-0.jpg(最新)、map-1.jpg、map-2.jpg、...、map-9.jpg(最旧)。现在我的 cronjob 从互联网上下载了一张新图片,并将其保存为 map-0.jpg。但是,所有其他文件都应重新枚举(0 -> 1、1 -> 2 等)。就我而言,数字 9 可以丢弃。
是否有一个方便的 bash 命令可以像 logrotate 一样枚举我的文件?
感谢帮助!
是否可以在 unix/bash 中将两个命令的输出通过管道传输到另一个命令?
我尝试运行以下命令,该命令成功运行了两个命令,但第一个通过管道传输到 stdout,第二个通过管道传输到 less。
$ grep 40515575 * && zgrep 40515575 * | less
Run Code Online (Sandbox Code Playgroud) 我在我的每个 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 示例相同的行为)
我该如何调试?
我可以通过按在 Chrome OS 中的应用程序之间切换alt-N,其中 N 是我的应用程序在状态栏上的位置。有用!
但是当我在我的 Nitrous.io 盒子的 bash shell 中时,按下alt-N以跳转到不同的应用程序会给 bash 一个命令:(arg: N).
该(arg: N)命令在 bash 中做什么?五分钟的搜索教会了我很多热键,但没有alt + 数字键。
我可以禁用它吗?
我刚刚在网上的一个 linux 论坛上遇到了这个命令,作者警告说不要为了好奇而尝试这个命令。于是我的好奇心来了。命令“:() { :|:& }; 是什么意思?:”在外壳中?
从 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) 我有以下类型的 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-script和ssh 和 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 argument和date: Undefined variable.