我想对语义版本进行排序(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不支持补丁,但它是必需的.
我正在寻找某种格式来描述 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) 例子。我有一个命名范围Apples(地址“ Sheet10!B2:B”),用于对大量工作表单元格进行数据验证。的数据范围Apples可以更改(在脚本中),例如更改为“ Sheet10!D2:D”。
我可以手动设置命名范围作为数据验证的数据源。在这种情况下,单元格的数据验证将始终引用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),并且不会使用对命名范围的引用。
有解决方法吗?
Spreadsheet.getRangeByName()不起作用按名称获取范围没有帮助,数据验证将获取实际范围地址。
SpreadsheetApp.getActive().getRangeByName("Apples")
正如@TheMaster 所言,目前这是不可能的。
请为帖子设置+1:
PS 看起来唯一可行的解决方案是 Google Sheets API。
我只是在官方文档中找不到答案。因此,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) 我想~/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 …
它以这种方式工作:
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) 我想将选项作为参数传递。例如:
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 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) 我们在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技巧(子命令).
在用户控制台中我有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)
那么,为什么它在脚本中不起作用呢?
需要构建一个字符串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) 我想在 rubydoc 中为参数或变量或@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)