我正在尝试创建一个使用多个Git命令和位置参数的别名.每个都有Stackoverflow页面,两者都显得非常明显,但我遇到了麻烦.
例如,我想切换到分支foo并执行状态.所以在我看来.gitconfig,我有:
[alias]
chs = !sh -c 'git checkout $0 && git status'
Run Code Online (Sandbox Code Playgroud)
这不起作用.而这样的事情会起作用.
chs = !sh -c 'git checkout $0'
echoes = !sh -c 'echo hi && echo bye'
Run Code Online (Sandbox Code Playgroud)
任何见解将不胜感激.
在下面的程序中,如果我$foo在第一个if语句中将变量设置为值1 ,那么它的作用就是在if语句之后记住它的值.但是,当我将同一个变量设置if为while语句内部的值2时,它在while循环之后就被遗忘了.它的行为就像我$foo在while循环中使用某种变量的副本而我只修改那个特定的副本.这是一个完整的测试程序:
#!/bin/bash
set -e
set -u
foo=0
bar="hello"
if [[ "$bar" == "hello" ]]
then
foo=1
echo "Setting \$foo to 1: $foo"
fi
echo "Variable \$foo after if statement: $foo"
lines="first line\nsecond line\nthird line"
echo -e $lines | while read line
do
if [[ "$line" == "second line" ]]
then
foo=2
echo "Variable \$foo updated to $foo inside if inside while loop"
fi
echo "Value …Run Code Online (Sandbox Code Playgroud) 我想说grep最多10行.
我不希望我的电脑努力工作.我希望它在grep找到10个结果后停止.可能吗?
我正在使用SH shell,我正在尝试将字符串与变量的值进行比较,但if条件总是执行为true.为什么?
这是一些代码:
Sourcesystem="ABC"
if [ "$Sourcesystem" -eq 'XYZ' ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
Run Code Online (Sandbox Code Playgroud)
即使这不起作用:
Sourcesystem="ABC"
if [ 'XYZ' -eq "$Sourcesystem" ]; then
echo "Sourcesystem Matched"
else
echo "Sourcesystem is NOT Matched $Sourcesystem"
fi;
echo Sourcesystem Value is $Sourcesystem ;
Run Code Online (Sandbox Code Playgroud)
其次,我们可以将它与NULL或空字符串匹配吗?
@在shell脚本中,一个美元符号后跟一个at符号()意味着什么?
例如:
umbrella_corp_options $@
Run Code Online (Sandbox Code Playgroud) 我有一个shell脚本,我在其中包装一个命令(mvn clean install),将输出重定向到日志文件.
#!/bin/bash
...
mvn clean install $@ | tee $logfile
echo $? # Does not show the return code of mvn clean install
Run Code Online (Sandbox Code Playgroud)
现在,如果mvn clean install失败并出现错误,我希望我的包装器shell脚本也会因该错误而失败.但是因为我将所有输出都传递给tee,所以我无法访问返回代码mvn clean install,所以当我$?之后访问时,它总是0(因为tee成功).
我尝试让命令将错误输出写入单独的文件并在之后检查,但mvn的错误输出始终为空(看起来它只写入stdout).
如何保留返回代码mvn clean install但仍然将输出传递给日志文件?
有两种方法可以捕获命令行的输出bash:
Legacy Bourne shell反手``:
var=`command`
Run Code Online (Sandbox Code Playgroud)$() 语法(据我所知,特定于Bash,或至少不受原始Bourne等非POSIX旧shell支持)
var=$(command)
Run Code Online (Sandbox Code Playgroud)与反引号相比,使用第二种语法有什么好处吗?或两者完全相同?
我试图使用xargs并行调用更复杂的函数.
#!/bin/bash
echo_var(){
echo $1
return 0
}
seq -f "n%04g" 1 100 |xargs -n 1 -P 10 -i echo_var {}
exit 0
Run Code Online (Sandbox Code Playgroud)
这将返回错误
xargs: echo_var: No such file or directory
Run Code Online (Sandbox Code Playgroud)
关于如何使用xargs来完成此任务或任何其他解决方案的任何想法都将受到欢迎.
我正在阅读一些shell脚本教程并找到以下示例程序:
#!/bin/sh
clear
echo "HELLO WORLD"
Run Code Online (Sandbox Code Playgroud)
任何人都可以告诉我#!/bin/sh在评论中提及' ' 的意义是什么?
我有一个使用shshell 的脚本.我在使用该source命令的行中出错.它似乎source没有包含在我的shshell中.
如果我明确尝试source从shell 运行我得到:
sh: 1: source: not found
Run Code Online (Sandbox Code Playgroud)
我应该以某种方式安装"源"?我的版本有错sh吗?