小编pur*_*aso的帖子

在ansible中,如何在文件末尾添加一个文本块,并在标记之前添加一个空行?

我有一个剧本,如下所示:

- hosts: localhost
  tasks:
    - name: update a file
      blockinfile:
        dest: /tmp/test
        block: |
          line 1
          line 2
Run Code Online (Sandbox Code Playgroud)

运行剧本后,文件/tmp/test变为:

a # this is the end line of the original file
# BEGIN ANSIBLE MANAGED BLOCK
line 1
line 2
# END ANSIBLE MANAGED BLOCK
Run Code Online (Sandbox Code Playgroud)

我想在标记“ # BEGIN ANSIBLE MANAGED BLOCK”之前添加一个空行(换行符)以获得视觉效果,最简单的方法是什么?最好在任务范围内,但欢迎任何想法。如果我重新定义标记,它将影响“BEGIN”和“END”标记。

ansible ansible-2.x

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

当进程不存在时,如何使用 powershell 杀死进程而不出现错误

我想杀死 nodepad 进程(如果存在)。如果我使用这个:

PS C:\> get-process -name notepad | Stop-Process -Force
Run Code Online (Sandbox Code Playgroud)

当进程不存在时,我会收到错误消息。

get-process : Cannot find a process with the name "notepad". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -name notepad | Stop-Process -Force
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (notepad:String) [Get-Process], ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand
Run Code Online (Sandbox Code Playgroud)

我觉得它应该是沉默的,因为它不是一个错误,该对象应该为空。

我知道我可以这样做:

PS C:\> get-process | where { $_.processname -eq 'notepad' } | Stop-Process -Force
Run Code Online (Sandbox Code Playgroud)

但我更喜欢一种简单的方法(如果存在的话)。谢谢。

PS:我需要杀死记事本,因为当我非交互式安装 ClamAV 时,它会创建带有用户手册的记事本。我找不到告诉 ClamAV 不要打开用户手册的方法。

windows powershell clamav

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

如何删除 Windows 上以点 (.) 结尾的目录?

我错误地创建了一个文件,并且我一生都无法删除它。如果您安装了7-Zip,则可以生成它。如果没有,安装也很容易。

以下是文件的创建方式:

PS C:\temp> mkdir abc
PS C:\temp> cd abc

PS C:\temp\abc> & 'C:\Program Files\7-Zip\7z.exe' a -spf .\DuoWindowsLogon.admx,.\en-us\DuoWindowsLogon.adml

Creating archive: .\DuoWindowsLogon.admx,.\en-us\DuoWindowsLogon.adml
Run Code Online (Sandbox Code Playgroud)

后来,我了解到我应该输入的正确命令是:

& 'C:\Program Files\7-Zip\7z.exe' a abc.7z -spf DuoWindowsLogon.admx en-us\DuoWindowsLogon.adml
Run Code Online (Sandbox Code Playgroud)

意识到错误后,我尝试删除错误创建的目录:

PS C:\temp\abc> ls
d-----       11/15/2020  11:09 PM                DuoWindowsLogon.admx,.

PS C:\temp\abc> ls D*
ls : Could not find item C:\temp\abc\DuoWindowsLogon.admx,..

PS C:\temp\abc> ls | rm
rm : Cannot find path 'C:\temp\abc\DuoWindowsLogon.admx,.' because it does not exist.

PS C:\temp\abc> rm *
rm : An object at the specified path …
Run Code Online (Sandbox Code Playgroud)

windows powershell 7zip windows-server-2012-r2 powershell-5.0

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

回声 abc | ruby -p -e "sub('a','A').sub('b', 'B')":为什么不是“ABc”?

我了解以下内容:

$ ruby -e "p 'abc'.sub('a','A').sub('b', 'B')"
"ABc"
Run Code Online (Sandbox Code Playgroud)

我也同意以下几点:

echo abc | ruby -p -e "sub('a','A');sub('b', 'B')"
ABc
Run Code Online (Sandbox Code Playgroud)

但:

echo abc | ruby -p -e "sub('a','A').sub('b', 'B')"
Abc
Run Code Online (Sandbox Code Playgroud)

我期望结果也是“ABc”,为什么不是?第二个sub('b', 'B')无法运行。

ruby

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

Perl 和 Ruby 中的多行模式不同:Ruby 错了吗?

让我们看看 Perl 代码和结果:

$s = "a\nb\nc\n";
$s =~ s/^b/X/;
print $s;

a
b
c

$s = "a\nb\nc\n";
$s =~ s/^b/X/m;
print $s;

a
X
c
Run Code Online (Sandbox Code Playgroud)

我认为 Perl 是对的, ^ 仅在启用多行时才匹配中间新行之后的位置。

让我们看看红宝石:

$s = "a\nb\nc\n"
print $s.sub(/^b/,'X')

a
X
c

$s = "a\nb\nc\n"
print $s.sub(/^b/m,'X')

a
X
c
Run Code Online (Sandbox Code Playgroud)

^ 匹配文本中间换行符后的位置,无论它是否处于多行模式。

在我的一生中,我找不到定义多行选项将做什么的 Ruby 文档,它在哪里?

Ruby 也没有单行模式吗?

undefined group option: /(?s)^b/
Run Code Online (Sandbox Code Playgroud)

/^b./s 将解析但它的行为不像 Perl(。匹配新行)。

PS:我使用 Perl 5 和 Ruby 3.0 进行了测试。

ruby regex perl

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

ansible 和 ssh 中的“我是谁”不输出任何内容

我在ansible中有以下测试代码:

- shell: who am i
  register: w

- debug:
    msg:
      - "{{ w }}" 
Run Code Online (Sandbox Code Playgroud)

它产生空标准输出,如下所示:

ok: [10.20.30.40] => {
    "msg": [
        {
            "changed": true,
            "cmd": "who am i",
            "delta": "0:00:00.003400",
            "end": "2021-02-02 21:19:50.454729",
            "failed": false,
            "rc": 0,
            "start": "2021-02-02 21:19:50.451329",
            "stderr": "",
            "stderr_lines": [],
            "stdout": "",
            "stdout_lines": []
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

该命令适用于某些服务器,但不适用于其他服务器。我无法弄清楚有什么区别。我只能猜测它与终端信息有关。当我以交互方式输入“我是谁”命令时,我得到了预期的结果。

我还注意到“who”命令中 ssh 的其他奇怪行为:

$ ssh myhost who       # who outputs nothing
$ ssh myhost who am i  # who am i outputs nothing
$ ssh myhost whoami …
Run Code Online (Sandbox Code Playgroud)

unix ssh shell command-line ansible

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