在shell脚本中,如何回显所有调用的shell命令并展开任何变量名?例如,给定以下行:
ls $DIRNAME
Run Code Online (Sandbox Code Playgroud)
我希望脚本运行该命令并显示以下内容
ls /full/path/to/some/dir
Run Code Online (Sandbox Code Playgroud)
目的是保存所有调用的shell命令及其参数的日志.也许有更好的方法来生成这样的日志?
我正在尝试使用Bash(使用Ubuntu)获得一个if声明:
#!/bin/bash
s1="hi"
s2="hi"
if ["$s1" == "$s2"]
then
echo match
fi
Run Code Online (Sandbox Code Playgroud)
我尝试了各种形式的if语句,使用[["$s1" == "$s2"]],有和没有引号,使用=,==和-eq,但我仍然得到以下错误:
[hi:命令未找到
我查看了各种网站和教程并复制了这些内容,但是它不起作用 - 我做错了什么?
最后,我想说是否$s1包含$s2,所以我该怎么做?
我刚刚解决了空位...:/我怎么说包含?
我试过了
if [[ "$s1" == "*$s2*" ]]
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我正在使用PowerShell并尝试运行以下命令:
.\test_cfdp.exe < test.full | tee test.log
Run Code Online (Sandbox Code Playgroud)
test.full是一个模拟test_cfdp.exe命令行输入的脚本.但是,我收到以下错误:
The '<' operator is reserved for future use.
Run Code Online (Sandbox Code Playgroud)
有没有其他方法(即cmdlet)我可以用来使这个命令在PowerShell中工作?
我有一个问题.我正在寻找这个答案很长时间 - 如何在新的bash shell中运行命令并在执行此命令后保留在这个新的shell中.例如:
bash -c "export PS1='> ' && ls"
Run Code Online (Sandbox Code Playgroud)
将使新的shell,导出PS1,列表目录和...将退出到我当前的shell.我想留在新的.
我有以下行作为更大的bash脚本的一部分:
if [ `packages/TinySVM-0.09/bin/svm_learn 2>&1| grep TinySVM | wc -l | cut -c0-7 | sed 's/^ *//g'` -eq 1 ]
Run Code Online (Sandbox Code Playgroud)
在运行脚本时,我得到:
./install.sh:219行:[: - eq:一元运算符预期
其中219行是上面的行.有什么修复建议吗?
我的bash脚本读入一些变量,然后在我的家庭网络上运行airodump.我想保持窗口与airodump运行并打开一些新的终端运行其他命令进行网络发现,同时airodump屏幕打开(所以我可以看到结果).
现在我看起来像这样(编辑简洁):
#!/bin/bash
read -p "Enter the channel: $channel"
airomon-ng start wlan0 $channel,$channel
airodump-ng -c $channel,$channel mon0 &&
terminator -e netstat -ax &&
terminator -e nmap 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
使用整个终端(airodump)的第一个命令启动正常,我可以看到网络,但它只是停留在该屏幕上.如果我按ctrl + c然后它返回提示但我可以看到错误:用法:终结者[选项]错误没有这样的选项
我希望netstat和nmap命令出现并保留在他们自己的终端窗口,我该怎么做?
假设我有一个非常简单的shell脚本'foo':
#!/bin/sh
echo $@
Run Code Online (Sandbox Code Playgroud)
如果我像这样调用它:
foo 1 2 3
Run Code Online (Sandbox Code Playgroud)
它愉快地打印:
1 2 3
Run Code Online (Sandbox Code Playgroud)
但是,假设我的一个参数是双引号括起来并包含空格:
foo 1 "this arg has whitespace" 3
Run Code Online (Sandbox Code Playgroud)
foo愉快地打印:
1 this arg has whitespace 3
Run Code Online (Sandbox Code Playgroud)
双引号被剥夺了!我知道shell认为它帮我一个忙,但是...我想得到原始版本的论点,不受shell解释的影响.有没有办法这样做?
在Windows上,我必须在start-ssh-agent.cmd打开的每个新终端会话上运行命令。我的开发环境是VSCode,每天我都会打开十几个新终端。每个终端打开后,我必须手动运行此命令。
每次打开一个终端时,是否可以在终端上运行此命令?
这可以采用VSCode扩展名,VSCode配置(设置)或Windows环境配置的形式。
任何的想法?
visual-studio-code vscode-extensions vscode-settings vscode-tasks
我需要在bash启动后立即运行命令,然后保持在会话中.我期待类似的东西可以工作bash && cd ~/Work,但是,显然,它会在初始会话中运行第二个命令,而不是我正在开始的那个.
我在新shell中发现了这个运行bash命令,并在此命令执行线程后保留在新shell中,但运行bash --rcfile对我不起作用,因为我仍然需要加载rcfile.
我有一个 bash 函数,我想使用 gnome 终端在新窗口中执行该函数。我该怎么做?我想在我的 blah.sh 脚本中做这样的事情:
my_func() {
// Do cool stuff
}
gnome-terminal -x my_func
Run Code Online (Sandbox Code Playgroud)
我现在正在做的是将 my_func() 放入脚本并调用 gnome-terminal -x ./my_func
我在 Windows 10 上使用 Ubuntu。
我的脚本 (SendTrends.sh) 一直运行,但有时我需要运行另一个脚本 (Historical+.sh),而不停止 SendTrends.sh。对我来说最好的选择是 Historical+.sh 将在另一个控制台中弹出,并在其工作后关闭该控制台。但如果它能正常工作,我会对单个控制台中的解决方案感到满意。我怎样才能做到这一点?
感谢您的任何帮助。
我正在尝试创建一个别名来帮助调试我的 docker 容器。
我发现 bash接受一个--init-file选项,该选项应该让我们在进入交互模式之前运行一些命令。
所以我想我可以做
docker-bash() {
docker run --rm -it "$1" bash --init-file <(echo "ls; pwd")
}
Run Code Online (Sandbox Code Playgroud)
但这些命令似乎没有运行:
% docker-bash c7460dfcab50
root@9c6f64a9db8c:/#
Run Code Online (Sandbox Code Playgroud)
这是一个逃避问题还是......发生了什么事?
bash --init-file <(echo "ls; pwd")
Run Code Online (Sandbox Code Playgroud)
单独在我的主机上的终端中按预期工作(运行命令启动一个新的 bash 实例)。
bash ×9
shell ×4
if-statement ×2
command ×1
conditional ×1
docker ×1
linux ×1
posix ×1
powershell ×1
redirect ×1
scripting ×1
sh ×1
syntax-error ×1
trace ×1
vscode-tasks ×1