相关疑难解决方法(0)

我如何在过去做一个Git提交?

我将所有内容转换为Git供我个人使用,我发现存储库中已有一些旧版本的文件.如何根据文件的"修改日期"以正确的顺序将其提交到历史记录,以便我有一个准确的文件历史记录?

我被告知这样的事情会起作用:

git filter-branch --env-filter="GIT_AUTHOR_DATE=... --index-filter "git commit path/to/file --date " --tag-name-filter cat -- --all  
Run Code Online (Sandbox Code Playgroud)

git version-control repository git-commit

204
推荐指数
12
解决办法
9万
查看次数

在shell脚本中使用$()而不是反引号有什么好处?

有两种方法可以捕获命令行的输出bash:

  1. Legacy Bourne shell反手``:

     var=`command`
    
    Run Code Online (Sandbox Code Playgroud)
  2. $() 语法(据我所知,特定于Bash,或至少不受原始Bourne等非POSIX旧shell支持)

     var=$(command)
    
    Run Code Online (Sandbox Code Playgroud)

与反引号相比,使用第二种语法有什么好处吗?或两者完全相同?

syntax sh backticks

149
推荐指数
8
解决办法
6万
查看次数

Bash中$ {}和$()之间的差异

我有两个问题,可以使用一些帮助来理解它们.

  1. ${}和之间有什么区别$()?我理解这() 意味着在单独的shell中运行命令并放置$意味着将值传递给变量.有人能帮助我理解这个吗?如果我错了,请纠正我.

  2. 如果我们可以使用for ((i=0;i<10;i++)); do echo $i; done并且它工作正常那么为什么我不能用它while ((i=0;i<10;i++)); do echo $i; done?两者的执行周期有什么不同?

linux bash scripting

77
推荐指数
2
解决办法
7万
查看次数

如何根据最后一个命令的退出代码更改 bash 提示颜色?

如果之前的退出代码为 0,我想显示绿色笑脸,如果不成功则显示红色笑脸。

基本上我想做这个提示,但包括其他东西。

PS1='\u@\h:\w `if [ $? = 0 ]; then echo \[\e[32m\]:\)\[\e[37m\]; else echo \[\e[31m\]:\(\[\e[37m\]; fi` $ '
Run Code Online (Sandbox Code Playgroud)

我想将条件逻辑抽象为一个函数,但是当我尝试将这两个组合在一起时,会显示转义字符而不是颜色。

smiley()                                                                       
{
    if [ $? == 0 ]; then
        echo ':)'
    else
        echo ':('
    fi
}
RED="\033[1;5;91m"
GREEN="\033[1;5;92m"
NONE="\033[m"
NORMAL="\[\033[0m\]"
YELLOW="\[\033[1;4;93m\]"
MAGENTA="\[\033[35m\]"
WHITE="\[\033[1;37m\]"
BLINK="\[\033[5m\]"
#INVERT="\[\e[7m\]"
#OFF="\[\033[m\]"

PS1="${YELLOW}\u${MAGENTA}@${YELLOW}\h${NORMAL}:${WHITE}\w $(smiley)\n"
Run Code Online (Sandbox Code Playgroud)

我什至尝试了一条线,但它也不起作用。

 PS1='\[\033[1;4;93m\]\u\[\033[35m\]@\[\033[1;4;93m\]\h\[\033[0m\]\[\033[1;37m\]    \W if [ $? = 0 ]; then echo \[\e[32m\]:\)\[\e[37m\]; else echo \[\e[31m\]:\(\[\    e[37m\]; fi\n'
Run Code Online (Sandbox Code Playgroud)

如果没有 PROMPT_COMMAND 有什么办法可以做到这一点?

bash

5
推荐指数
1
解决办法
4484
查看次数

如何在Unix Bash脚本中用新行替换"\n"字符串

似乎无法在网上找到这个答案...

我有一个字符串变量(外部源),新行"\n"编码为字符串.

我想用实际的新行回车替换这些字符串.下面的代码可以达到这个目的......

echo $EXT_DESCR | sed 's/\\n/\n/g'
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将结果存储到它自己的变量中时,它会将它们转换回字符串

NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
Run Code Online (Sandbox Code Playgroud)

如何实现这一目标,或者我做错了什么?

这是我的代码,我一直在测试,以尝试获得正确的结果

EXT_DESCR="This is a text\nWith a new line"
echo $EXT_DESCR | sed 's/\\n/\n/g'

NEW_DESCR=`echo $EXT_DESCR | sed 's/\\n/\n/g'`
echo ""
echo "$NEW_DESCR"
Run Code Online (Sandbox Code Playgroud)

unix variables bash shell

3
推荐指数
2
解决办法
785
查看次数