小编Kir*_*rby的帖子

如何在bash中对语义版本进行排序?

我想对语义版本进行排序(semver.org)

v1.4.0
v1.4.0-alpha
v1.4.0-alpha1
v1.4.0-patch
v1.4.0-patch9
v1.4.0-patch10
v1.4.0-patch2
v1.5.0
v1.5.0-alpha
v1.5.0-alpha1
v1.5.0-alpha2
v1.5.0-patch
v1.5.0-patch1
Run Code Online (Sandbox Code Playgroud)

以适当的方式.例如,就像version_compare()在PHP中一样(它不直接,但可以用于此).

当然,sort -V|--version-sort这里不起作用.

$ echo 1.0 1.0-alpha | tr ' ' "\n" | sort --version-sort
1.0
1.0-alpha
Run Code Online (Sandbox Code Playgroud)

有一些存在的方法吗?

PS

在一般意义上,它应遵循此模式:

1.0.0-alpha 
  < 1.0.0-alpha.1 
    < 1.0.0-alpha.beta 
      < 1.0.0-beta
        < 1.0.0-beta.2
          < 1.0.0-beta.11
           < 1.0.0-rc.1 < 1.0.0
             < 1.0.0-patch < 1.0.0-patch.1.
Run Code Online (Sandbox Code Playgroud)

PPS

Semver 2.0不支持补丁,但它是必需的.

sorting bash version semantic-versioning

10
推荐指数
3
解决办法
3495
查看次数

如何记录shell函数?

我正在寻找某种格式来描述 shell 脚本中的函数。例如在 PHP 中:

/**
 * My description
 *
 * @param string $paramOne Some extra comment for this parameter
 * @param int    $paramTwo
 * @return $this
 */
function myCoolFunc($paramOne, $paramTwo)
{
}
Run Code Online (Sandbox Code Playgroud)

有什么文档格式吗?

UPD 1我不是在寻找一些文档处理器。只是格式化。

它会是这样的:

# Simple yes/no dialog question
#
# e.g.: $(dialog_yes_no 'Would like to repeat?' 'n' 3)
#
# string question
# string default
# int mistakes_count = 5
function dialog_yes_no
{
}
Run Code Online (Sandbox Code Playgroud)

documentation bash shell function

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

如何在 Google 电子表格中以编程方式(在 Google Apps 脚本中)设置数据验证的命名范围?

使用案例

例子。我有一个命名范围Apples(地址“ Sheet10!B2:B”),用于对大量工作表单元格进行数据验证。的数据范围Apples可以更改(在脚本中),例如更改为“ Sheet10!D2:D”。

它可以从 UI 运行

我可以手动设置命名范围作为数据验证的数据源。在这种情况下,单元格的数据验证将始终引用Apples已更新数据范围的命名范围。

如何在 Google Apps 脚本中制作它?

气体限制

如果您有一个对象,用于设置数据验证的代码应如下所示namedRange

      mySheet.getRange('F5')
        .setDataValidation(
          SpreadsheetApp.newDataValidation()
            .requireValueInRange(
              namedRange.getRange()
            )
            .setAllowInvalid(false)
            .build()
        );
Run Code Online (Sandbox Code Playgroud)

DataValidationBuilder.requireValueInRange()在这里不起作用,因为它只需要class Range(它无法 get NamedRange),并且不会使用对命名范围的引用。

有解决方法吗?

UPD1 -Spreadsheet.getRangeByName()不起作用

按名称获取范围没有帮助,数据验证将获取实际范围地址。 SpreadsheetApp.getActive().getRangeByName("Apples")

UPD2 到目前为止,GAS 还没有办法做到这一点

正如@TheMaster 所言,目前这是不可能的。

请为帖子设置+1:

PS 看起来唯一可行的解​​决方案是 Google Sheets API。

google-sheets google-apps-script google-sheets-api

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

根据Symfony编码标准进行类型转换后是否需要保留空间?

我只是在官方文档中找不到答案。因此,PHP Code Sniffer说这是必需的(编码标准包escapestudios/symfony2-coding-standard)。

示例如下:

$result = (bool) foo();
Run Code Online (Sandbox Code Playgroud)

反之亦然:

$result = (bool)foo();
Run Code Online (Sandbox Code Playgroud)

php coding-style symfony

4
推荐指数
1
解决办法
2134
查看次数

如何保留Docker容器卷文件?

我想~/mydir与主机共享目录,但不能用主机文件替换Docker容器目录.所以我有docker-compose.yml

version: '2'
services:
  app:
    container_name: mono
    build: .
    volumes:
      # save .composer files on host to keep cache warmed up
      - '/srv/mono/mydir:/root/mydir'
    command: sleep infinity
Run Code Online (Sandbox Code Playgroud)

Dockerfile

#/bin/bash
FROM php:5.6

RUN mkdir /root/mydir && echo '{}' > /root/mydir/myfile.json

VOLUME /root/mydir
Run Code Online (Sandbox Code Playgroud)

目录/srv/mono/mydir是空的.它被替换为主机目录.很明显.

但是如何保留原始文件?

例如,它适用于MySQL Percona容器:

version: '2'
services:
  percona-56:
    container_name: percona-56
    image: percona/percona-server:5.6
    volumes:
    - /srv/mysql/percona-56:/var/lib/mysql
    environment:
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
Run Code Online (Sandbox Code Playgroud)

容器中有原始文件:

$ ll /srv/mysql/percona-56
total 176220
    auto.cnf
    error.log
    ibdata1
    ib_logfile0
    ib_logfile1
    init.ok
    mysql
    performance_schema
Run Code Online (Sandbox Code Playgroud)

我试图检查Percona …

docker dockerfile docker-compose docker-volume

4
推荐指数
1
解决办法
3471
查看次数

如何在git diff命令中显示相对路径?

它以这种方式工作:

MYPC /d/home/project/some/path (master)
$ git diff --name-only --cached
root.txt
some/path/relative.txt
Run Code Online (Sandbox Code Playgroud)

即它显示了来自GIT根目录的路径,但是我需要来自当前目录的相对路径。

预期结果 :

$ git diff --name-only --cached --AND_SOME_OPTION
../../root.txt
relative.txt
Run Code Online (Sandbox Code Playgroud)

按照常识,它应该像一样工作git status

PS--relative选项不起作用,因为它将显示该目录中的文件。在我们的示例中,它将仅显示relative.txt

PPS

使用--git-dir效果不佳:

$ git --git-dir=$(git rev-parse --show-toplevel)/.git  diff --cached --name-only
root.txt
some/path/relative.txt
Run Code Online (Sandbox Code Playgroud)

git git-diff

4
推荐指数
1
解决办法
1405
查看次数

在 bash 中的自定义 getopts 脚本中将参数作为选项传递

我想将选项作为参数传递。例如:

mycommand -a 1 -t '-q -w 111'
Run Code Online (Sandbox Code Playgroud)

该脚本无法识别引号中的字符串。即它只获取字符串的一部分。

getopts工作原理是一样的 - 它只看到-q.

对于自定义 getopts,我使用类似的脚本(示例):

while :
do
    case $1 in
        -h | --help | -\?)
            # Show some help
            ;;
        -p | --project)
            PROJECT="$2"
            shift 2
            ;;
        -*)
            printf >&2 'WARN: Unknown option (ignored): %s\n' "$1"
            shift
            ;;
        *)  # no more options. Stop while loop
            break
            ;;
        --) # End of all options
        echo "End of all options"
            shift
            break
            ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

bash getopt getopts

2
推荐指数
1
解决办法
2309
查看次数

为什么使用“and”运算符(“&amp;&amp;”)的链命令不会在启用“errexit”的情况下停止于非零结果?

bash v4.4.12在 Debian 上进行了默认设置:

$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

我更喜欢在我的脚本中使用这些选项:

set -o pipefail
set -o errexit
set -o nounset
Run Code Online (Sandbox Code Playgroud)

它使管道命令 ( ) 中的非零结果停止脚本pipefail,执行退出 ( errexit),并验证未设置的变量 ( nounset)。

我有测试脚本:

set -o pipefail
set -o errexit
set -o nounset
set -o xtrace

return_1() { return 22; }

test_1 () {
  return_1;
  echo 'after';
}

success_1() {
  echo success
}

if [ "${1:-}" == 1 ]; then
  # make "return 1" in the root …
Run Code Online (Sandbox Code Playgroud)

error-handling bash

2
推荐指数
1
解决办法
651
查看次数

如何在git中重新添加添加的文件(仅更新暂存文件)?

我们在path/to/another/和中修改了文件path/to/main/.已添加到git缓存中的
文件,path/to/main/但我们已更新path/to/main/Bar.php文件AGAIN.我们现在有以下情况:

$ git status
[...]
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   path/to/main/Foo.php
        modified:   path/to/main/Bar.php

Changes not staged for commit:
    (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   path/to/main/Bar.php
        modified:   path/to/another/Aaa.php
        modified:   path/to/another/Bbb.php
Run Code Online (Sandbox Code Playgroud)

(注意路径/到/ main/Bar.php出现两次)

我需要一个可以读取之前添加的文件而不使用特定路径的命令.

PS git add --update将添加所有这些文件.它不起作用.

PPS此命令应该能够读取modified:和输入new file:类型.

UPD1

感谢@AyonNahiyan,是的,它可以在bash中运行.但也许有一个命令没有使用bash技巧(子命令).

git git-add

1
推荐指数
3
解决办法
2674
查看次数

Bash 参数扩展仅在交互式 shell 中有效,但在脚本中无效

在用户控制台中我有bash

$ echo $SHELL
/bin/bash
$ bash --version
GNU bash, version 4.2.46(1)-release (x86_64-redhat-linux-gnu)
Run Code Online (Sandbox Code Playgroud)

我在文件 test.sh 中有代码:

$ cat test.sh
aaa='---aa-aa---'
echo "${aaa}"
echo 'does not work...'
# trim "-"
echo ${aaa/+(-)}
echo ${aaa%%+(-)}
echo 'works for one symbol...'
echo ${aaa%-}
echo ${aaa/-}
Run Code Online (Sandbox Code Playgroud)

最后两行工作正常,但前面的两行工作正常。

$ bash test.sh
---aa-aa---
does not work...
---aa-aa---
---aa-aa---
works for one symbol...
---aa-aa--
--aa-aa---
Run Code Online (Sandbox Code Playgroud)

同时,如果您尝试使该控制台正常工作:

$ aaa='---aa-aa---'
$ echo ${aaa/+(-)}
aa-aa---
$ echo ${aaa%%+(-)}
---aa-aa
Run Code Online (Sandbox Code Playgroud)

那么,为什么它在脚本中不起作用呢?

bash trim

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

是否有可能在命令行中的perl中以printf格式获取特定参数?

需要构建一个字符串foobar is not foo and not bar.

printf格式中%$2s,"2"表示特定的参数位置.

但它在perl中不起作用:

$ perl -e "printf('%$1s$2s is not %$1s and not %$2s', 'foo', 'bar');"
%2 is not %1 and not %2
Run Code Online (Sandbox Code Playgroud)

我的环境:

$ perl --version

This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi
(with 29 registered patches, see perl -V for more detail)
Run Code Online (Sandbox Code Playgroud)

perl printf arguments

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

如何在 ruby​​ documentor 中声明特定类型的数组?

我想在 ruby​​doc 中为参数或变量或@return. (一定是RDoc?..)

主要原因是让 RubyMine(或其他 IDE)以正确的方式支持自动完成功能、可点击方法、重构等。

在 PHP 中将如下所示:

/**
 * @param array $items
 * @param Filter[] $filters
 * @return Result[]
 */
function filter($items, $filters) {}
Run Code Online (Sandbox Code Playgroud)

我只是不确定它是否可以在 RubyMine 中以类似的方式工作:

##
# @param [Array] items
# @param [Filter[]] filters
# @return [ResultClass[]]
#
def filter(items, filters); end
Run Code Online (Sandbox Code Playgroud)

PHP 中的额外示例:

class My
{
    public $name;
}

/**
 * @return My[]
 */
function foo()
{
      // Similar code here
      //return [new My(), new My()];
}

function show()
{
    foreach (foo() …
Run Code Online (Sandbox Code Playgroud)

ruby rdoc rubymine

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