我尝试在 Ubuntu 上运行一个 shell 脚本文件但目前失败了。
在我的终端中:
~/Desktop/FTL/data$ ls
amd64 exe_icon.bmp FTL licenses resources x86
~/Desktop/FTL/data$ sudo bash ./FTL.sh
[sudo] password for anon:
bash: ./FTL.sh: No such file or directory
~/Desktop/FTL/data$ sh FTL.sh
sh: 0: Can't open FTL.sh
~/Desktop/FTL/data$
答案1
嗯,从命令的输出可以看出ls
,文件的名称是FTL
,而不是FTL.sh
。所以你应该使用:
sudo bash ./FTL
或者
sh ./FTL
或者可能只有:
./FTL
还要确保该文件是可执行的,通过运行:
chmod +x FTL
答案2
首先想到的是将扩展名改为.sh
。应该能够以 的身份运行。其次,如果文件顶部./FTL.sh
缺少,那么它也不会起作用。#!/bin/sh
第三,如果您最终将sudo
命令与不需要的命令混合在一起sudo
,您可以echo <sudo_password> | command
。
在这种情况下,最佳做法(从自动化/ QA 角度来看)是以以下方式运行您的命令./FTL.sh <sudo_password>
并捕获密码,以便稍后在脚本中为每个将提示输入 sudo 密码的命令使用密码。
前任:
#!/bin/sh
PW=$1 #sets first parameter
...
# non-sudo commands
...
echo $PW | command`
yes |
当你的命令询问你是否要继续时,加上一个也是不错的主意。然后你可以将上面的代码修改为echo $PW | yes | command
我通常还会在测试期间捕获所有输出,这可以通过附加|& tee path/to/logfile.log
到任何命令的末尾来实现,如果您想在控制台中观察它的进度,或者如果它运行时间很长或者不想监视进度,则切换|& tee
到。&>
前任:
if echo $PW | yes | command |& tee path/to/logfile.log; then
if sed -Fq "Validation Passed" path/to/logfile.log; then
echo "PASS: returned 'Validation Pass'"
else echo "FAIL: test did not return 'Validation Pass'"
fi
else echo "Test Failed"
fi
只需快速了解一下 sed 命令,-F
它允许您指定文件名(而不是搜索进程输出),然后-q
静默运行 sed,并在完成文件/进程搜索后退出。请参阅sed 文档了解更多信息。
答案3
始终对服务器要执行的每个脚本使用此命令。
chmod +x filename.ext