标签: pipe

在 Bash for 循环中,我可以将前一个迭代的标准输出读取为标准输入吗?

我有一个 bash oneliner,我通过相同的 ImageMagick 操作多次对一张图像进行管道传输。我想将其作为 Bash 循环来执行,最好不使用临时文件。

单行是:cat in.jpg | convert -quality 1 - jpg:- | convert -quality 1 - jpg:- | convert -quality 1 - jpg:- > out.jpg

这个也有效:(convert -quality 1 - jpg:- | convert -quality 1 - jpg:- | convert -quality 1 - jpg:-) > out.jpg < in.jpg

convert在命令中,-意思是“从标准输入读取”,jpg:-意思是“以 JPEG 格式输出到标准输出”。

我尝试过执行cat in.jpg | for x in {1..3}; do convert -quality 1 - jpg:-; done > out.jpg(for x …

bash loops pipe imagemagick

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

为什么我的 NamedPipe 用空格分隔字符串?

我正在制作一个简单的客户端服务器管道示例作为练习。服务器将使用命名管道从客户端接收字符串。服务器将从客户端接收到的字符串中每个字符的大小写反转,并使用管道将字符串发送回客户端。它有效,但我写入管道的字符串似乎被空格打破了。随附的图片显示了我的问题。

我在服务器上创建一个像这样的命名管道。

HANDLE pipe_handle = CreateNamedPipe( PIPE_REV_NAME, //name PIPE_ACCESS_DUPLEX, //openMode PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE, //Pipe Mode 1,//Max Instances 1024,//OutBuffSize 1024,//InBuffSize NMPWAIT_USE_DEFAULT_WAIT, NULL);

并在服务器上对其进行读取和写入,如下所示:

    DWORD bytes_read;
    ReadFile(
        pipe_handle,
        (LPVOID)string_to_reverse,
        MAX_PIPE_REVLEN - 1,
        &bytes_read,
        NULL);  
    string_to_reverse[bytes_read] = '\0';
    printf("Recieved: %s\n", string_to_reverse);
    cap_reverse(string_to_reverse, bytes_read);
    printf("Sending: %s\n", string_to_reverse);

    DWORD bytes_written;

    WriteFile(
        pipe_handle,
        (LPVOID)string_to_reverse,
        bytes_read,
        &bytes_written,
        NULL);
Run Code Online (Sandbox Code Playgroud)

客户端创建一个文件来使用管道,如下所示:

HANDLE pipe_handle = CreateFile(
    PIPE_REV_NAME,
    GENERIC_READ | GENERIC_WRITE,
    0,              // no sharing 
    NULL,           // default security attributes
    OPEN_EXISTING,  // opens existing pipe 
    0,              // default attributes 
    NULL
); …
Run Code Online (Sandbox Code Playgroud)

c++ operating-system pipe

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

单击按钮时触发角管事件

我想在单击按钮时实现 Angular 5 搜索管道。

我有一个输入框,它将接收自定义搜索值,并从对象数组中过滤不同的键值。我在输入文本时实现了角管,它进行搜索,但我想仅在用户输入和搜索按钮被单击时触发此操作。无论如何我们可以实现这一目标吗?我被困在实现点击事件上

itemsearch.pipe.ts

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
name: 'itemsearch'
})
export class ItemsearchPipe implements PipeTransform {

  public transform(value, keys: string, term: string) {

if (!term) {
  return value;
}
return (value || []).filter(item => keys.split(',').some(key => 
 item.hasOwnProperty(key) && new RegExp(term, 'gi').test(item[key])));
Run Code Online (Sandbox Code Playgroud)

} }

 itemcomponent.ts


<div *ngFor="let item of items | itemsearch:'name, age':query"> 
{{item.name}}
         {{item.age}} </div>
</div>
Run Code Online (Sandbox Code Playgroud)

pipe onclick filter angular

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

如何通过R中的管道将输出发送到特定位置

我正在编写一个小代码,比较两次并找到差异并以 HH:MM:SS 格式显示。

library(magrittr)
library(lubridate)
s1 <- ymd_hms(Sys.time())
s2 <- ymd_hms(Sys.time()) +200
d1 <- seconds_to_period(as.numeric(difftime(s2, s1, units = "secs")));
d2 <-sprintf('%02d:%02d:%02d', hour(d1), minute(d1), second(d1));
Run Code Online (Sandbox Code Playgroud)

d2 [1]“00:03:21”

我尝试的另一种方法是通过管道技术。但在这里,我收到一个错误。

s1 <- ymd_hms(Sys.time())
s2 <- ymd_hms(Sys.time()) +200
d3 <- difftime(s2, s1, units = "secs")  %>% as.numeric() %>% seconds_to_period() %>% sprintf('%02d:%02d:%02d', hour(.), minute(.), second(.))
Run Code Online (Sandbox Code Playgroud)

d3 <- difftime(s2, s1, 单位 = "秒") %>% as.numeric() %>% secondary_to_period() %>% + sprintf('%02d:%02d:%02d', hour(.) , 分钟(.), 秒(.)) sprintf(., "%02d:%02d:%02d", 小时(.), 分钟(.), 秒(.)) 中的错误: 'fmt' 不是字符向量

点操作似乎不适用于这种情况。我应该怎么办?

另外,有没有更好的方法来实现时间功能?

r pipe

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

Kubernetes:如何使用具有管道的 Exec 编写 livenessprobe 和 readinessprobe

我正在使用 Exec 探针添加活性探针和就绪探针。
我的配置如下:

readinessProbe:
    exec:
      command: "/usr/bin/jps -l | grep QueueProcess"
    periodSeconds: 10 
    failureThreshold: 2
    successThreshold: 2
Run Code Online (Sandbox Code Playgroud)

当上面的方法不起作用时。我对此进行了修改并尝试了:

readinessProbe:
     exec:
       command: ["/usr/bin/jps", "-l", "|", "grep","QueueProcess"]
     periodSeconds: 10 
     failureThreshold: 2
     successThreshold: 2
Run Code Online (Sandbox Code Playgroud)

运行时kubectl describe pod,得到以下输出:

  Normal   Created           37s                  kubelet             Created container app1
  Normal   Started           37s                  kubelet             Started container app1
  Warning  Unhealthy         6s (x3 over 26s)     kubelet             Readiness probe failed: invalid argument count
usage: jps [-help]
       jps [-q] [-mlvV] [<hostid>]

Definitions:
    <hostid>:      <hostname>[:<port>]

Run Code Online (Sandbox Code Playgroud)

我尝试了另一个应用程序,我正在其中运行grpcurl来调用运行状况检查:

readinessProbe:
    exec:
      command: …
Run Code Online (Sandbox Code Playgroud)

pipe exec kubernetes readinessprobe

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

将字符串、文件内容、字符串通过管道传输到 SQLite 中,而无需中间文件?

我有这个 shell 脚本,它采用一组 INSERT 语句,并在开头放置“BEGIN TRANSACTION”,在末尾放置“COMMIT”。有很多INSERT语句,因此这使得插入速度更快。

我成功使用的脚本如下所示:

file_name_improved_sql=foo-improved.sql
file_name_original_sql=foo.sql
file_name_sqlite_db=bar.db
path_to_insert_error=/tmp/fooerrors.log
#
echo 'BEGIN TRANSACTION;' | cat - $file_name_original_sql  > $file_name_improved_sql
echo "COMMIT;" >> $file_name_improved_sql
#
cat $file_name_improved_sql | sqlite3 $file_name_sqlite_db 2> $path_to_insert_error
Run Code Online (Sandbox Code Playgroud)

我想改进这一点,以便不生成中间文件file_name_improved_sql,而是直接通过管道输入两个字符串和文件内容。

像这样的东西(除了这不起作用)......

export string1="BEGIN TRANSACTION"
export string2="COMMIT"
cat $string1 $file_name_improved_sql $string2 | sqlite3 $file_name_sqlite_db 2> $path_to_insert_error
Run Code Online (Sandbox Code Playgroud)

sqlite bash shell pipe

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

IPC 性能:匿名管道与套接字

这个问题类似于IPC性能:命名管道与套接字,但重点关注匿名而不是命名管道:不同操作系统和不同传输大小的匿名管道和TCP连接之间的性能差异如何?

sockets performance benchmarking tcp pipe

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

为什么有角度的日期管会减去一天?

如果我使用的话{{"2021-09-30T00:00:00Z" | date: "yyyy-MM-dd"}},它会自动减去一天并显示2021-09-29。我想是因为时间是00:00,所以才变得混乱吧?

如何使日期正确显示,以2021-09-30角度方式使用日期管道?

date pipe angular

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

将 stdin 通过管道传输到 cURL 标头

我正在尝试从 Keycloak 端点获取身份验证令牌并使用它来访问另一个资源。获取令牌不是问题,但将其传递到另一个请求的标头中却是一项不可能的任务,至少在单个命令中是这样:

curl \
    -X POST \
    -d 'client_id=app' \
    -d 'username=username' \
    -d 'password=password' \
    -d 'grant_type=password' \
    -d "client_secret=$APP_SECRET" \
    'http://localhost:9000/auth/realms/realm/protocol/openid-connect/token' \
| \
jq -r '.access_token' \
| \
curl \
    -X GET \
    -H "Accept: application/json" \
    -H "Authorization: Bearer @-" \ # <- read header value from stdin
    -u "username:password" \
    "http://localhost:8080/app/api/"
Run Code Online (Sandbox Code Playgroud)

实现这一目标的替代方法是什么?

curl zsh pipe jq keycloak

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

了解 Magrittr 管道 `%&gt;%` 语法的正确使用

我有一个命名的数字向量,我试图将每个元素除以所有元素的总和。然后我想使用该signif函数四舍五入到有效数字。通过计算除法并存储变量,然后使用存储的变量来计算有效数字,“老派”的做法很容易。magrittr但是,如果我尝试使用管道运算符 ( )直接通过管道进行计算%>%signif则不会真正对向量执行任何操作。

我试图理解其中的区别,因为我经常遇到管道与基本 R 函数结合使用的问题。

这是一个示例,我得到的输出:

> # My named vector
> v <-setNames(c(1:5), letters[1:5])

> # Dividing each element by the total sum and rounding to significant figures
> a <- v/sum(v)
> a <- signif(a, digits = 3)

> # Dividing each element by the total sum and piping directly to signif()
> b <- v/sum(v) %>% signif(digits = 3)

> a
> b

a: 0.0667   b 0.133   c …
Run Code Online (Sandbox Code Playgroud)

r pipe operator-precedence magrittr

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