我想控制这样的 bash 脚本:
#!/bin/sh
USER1=_parsefromfile_
HOST1=_parsefromfile_
PW1=_parsefromfile_
USER2=_parsefromfile_
HOST2=_parsefromfile_
PW2=_parsefromfile_
imapsync \
--buffersize 8192000 --nosyncacls --subscribe --syncinternaldates --IgnoreSizeErrors \
--host1 $HOST1 --user1 $USER1 --password1 $PW1 --ssl1 --port1 993 --noauthmd5 \
--host2 $HOST2 --user2 $USER2 --password2 $PW2 --ssl2 --port2 993 --noauthmd5 --allowsizemismatch
Run Code Online (Sandbox Code Playgroud)
使用来自控制文件的参数,如下所示:
host1 user1 password1 host2 user2 password2
anotherhost1 anotheruser1 anotherpassword1 anotherhost2 anotheruser2 anotherpassword2
Run Code Online (Sandbox Code Playgroud)
其中每一行代表脚本的一次运行,其中提取了参数并制成变量。
这样做的最优雅的方式是什么?
拍
我正在尝试编写一个脚本,该脚本允许用户选择他需要对表格进行的操作。我想检查表是否存在。如果它存在,我将继续其他事情,否则我退出说表不存在。我怎么可能做到这一点。
我已经成功安装了 TeamCity ib CentOS 6.2 Minimal。我一直在尝试在系统启动时自动运行脚本:
/opt/TeamCity/bin/teamcity-server.sh start
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索并尝试了各种方法,但似乎都失败了。大多数方法都指向将启动脚本添加到 rc.local 文件之一:
/etc/rc.d/rc.local
/etc/rc.local
Run Code Online (Sandbox Code Playgroud)
并且 rc.local 的内容包含以下行:
/opt/TeamCity/bin/teamcity-server.sh start
Run Code Online (Sandbox Code Playgroud)
没有一个会启动teamcity服务器
如果我手动运行脚本没有问题。
看起来很简单,但如何让 shell 脚本自动运行?
我有一个脚本:
#!/bin/bash
echo "$(dirname $(readlink -e $1))/$(basename $1)"
Run Code Online (Sandbox Code Playgroud)
位于此处:/home/myuser/bin/abspath.sh具有执行权限。
如果我运行,echo $PATH我会得到以下信息:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/myuser/bin
我希望能够从任何目录调用abspath <some_path_here>并调用我的脚本。我正在使用 bash,我做错了什么?
如何使用 shell 脚本从 docker hub 删除 docker 镜像。
我想从 docker hub 中删除私人 docker hub 帐户过去 50 天之前的所有映像。
有任何想法吗?通过 Jenkins 或 bash 终端创建和运行此 shell 脚本时要使用哪些工具。
我正在考虑使用curl来实现我的目标。
假设我有一个名为 jobs.csv 的文件,我希望由 Foo 完成前 50k 项工作
我可以这样做:
# cat jobs.csv | sort -u | head -n 50000 > /tmp/jobs.csv
# cat /tmp/jobs.csv | while read line; do Foo --job=$line; done
Run Code Online (Sandbox Code Playgroud)
或者
# cat jobs.csv | sort -u | head -n 50000 | while read line; do Foo --job=$line; done
Run Code Online (Sandbox Code Playgroud)
在系统的 IO/内存效率方面,谁能说出哪个更好?
或者更好的是,可以为此提出更好的解决方案吗?
watch 命令通知 linux 上新创建的文件
如何修改以下命令以通知 linux 用户 john 创建新文件到 /usr/local/mydir/ ?
watch -d 'ls -l /usr/local/mydir/ | fgrep john'
Run Code Online (Sandbox Code Playgroud)
即,如果在 /usr/local/mydir/ 中创建了任何新文件,我想持续监视并调用另一个脚本。
在生产中,我不能使用任何工具而不是 shell 脚本。那么可以帮助我使用 shell 脚本解决方案吗?
我编写了 active.ksh 脚本(基于expect),以便自动登录到某些 Solaris 机器并执行主机名命令(登录到虚拟 IP 以验证哪个主机名是活动机器 - 我有两个集群 solaris 机器)
问题在于expect; 期望发送密码字符串 (pass123) 并且它错过了密码问题,它仍然等待密码。
所以实际上密码(pass123)是在密码问题之后输入的。在大多数情况下,expect 脚本工作正常,但有时会错过密码。
问题示例
./active.ksh
spawn ssh 10.10.18.61
sh: /usr/local/bin/stty: not found
This computer system, including all related equipment, networks and network devices (specifically including Internet access),is provided only for authorized uss
Password: * my remark - pass123 string was missed the Password Question pass123
Password:
Run Code Online (Sandbox Code Playgroud)
#!/bin/ksh
VIP_ADDRESS=10.10.18.61
expect_for_verify_which_active_machine=`cat << EOF
set timeout -1
spawn ssh $VIP_ADDRESS
expect {
")?" { send "yes\r" …Run Code Online (Sandbox Code Playgroud) 我在名为network_list.txt. 如何运行服务器并运行命令并显示结果?我尝试了以下方法:
filename="network_list.txt"
service=httpd
while read -r line
do
name="$line"
ping -c 3 $name > /dev/null 2>&1;
RETVAL=$?
if [ $RETVAL -ne 0 ]
then
echo "$name is down"
else
echo "$name is up and running"
fi
http_status=$(ssh $name ps -ef | grep -v grep | grep $service | wc -l)
if [ $http_status -ne 0 ]
then
echo "$service is up and running in $name"
else
echo "$service is down in $name"
fi
done < "$filename"
Run Code Online (Sandbox Code Playgroud)
但它在第一台服务器后停止。 …
我想创建一个 tarball,其中包含ctime小于 30 天的目录中的文件。我发现的大多数教程基本上都推荐做这样的事情:
tar cvf foo.tar $(find ~/POD -type f -ctime -30)
Run Code Online (Sandbox Code Playgroud)
问题是我想压缩的很多文件的名称中都包含空格。这意味着该tar命令将基于空格分隔,这意味着完整的文件路径将被分解。
所以现在我试图让find命令返回一个带引号的文件路径列表。所以这是我尝试过的:
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
Run Code Online (Sandbox Code Playgroud)
但是这个命令也把所有基于空格的文件名分解了。然后我尝试了这个:
oldifs=$IFS
IFS=\n
find . -type f -ctime -30 | xargs printf "\"%s\"\n"
IFS=$oldifs
Run Code Online (Sandbox Code Playgroud)
但这给了我相同的结果。
有没有办法可以将完整路径名传递给tar并让所有内容都使用名称中的空格?