我有一个文件,我想扫描它,找到字符“{”并创建一个新行,然后在新行上添加一个IP,并在该行末尾添加一个半古龙水,然后写入配置文件。
从 shell 运行时,我可以使用以下 sed 命令来完成此操作:
sed -i 's/{/&\n1.1.1.1;/g' /tmp/test.conf
Run Code Online (Sandbox Code Playgroud)
在 test.conf 内:
acl testACL{
};
Run Code Online (Sandbox Code Playgroud)
shell 中命令的输出显示:
acl testACL{
1.1.1.1;
};
Run Code Online (Sandbox Code Playgroud)
完美!现在的问题是当我让nodejs执行它时:
var sys = require('sys');
var exec = require('child_process').exec;
function puts(error, stdout, stderr) { sys.puts(stdout) };
exec("sed -i 's/{/&\n1.1.1.1;/g' /tmp/test.conf",puts);
return 0;
Run Code Online (Sandbox Code Playgroud)
当我在控制台中运行命令时:“nodejs test.js”
我得到空白输出,当我检查文件时,文件“test.conf”尚未更改!为什么?!
另外,如果您认为“这是权限问题!” 我已经让 nodejs exec 命令将基本回显写入测试配置文件,并且工作正常。
我也尝试过“shelljs”模块,但没有运气。我已经尝试了无数的组合几个小时了,但没有成功!我很困惑。
如果您在PATH调用中创建一个 shell 脚本git-mydiff,其中包含:
#!/bin/bash
exec git diff
Run Code Online (Sandbox Code Playgroud)
git mydiff并在一个有大量更改的存储库中调用,当退出分页器时,它会输出:
error: git-mydiff died of signal 13
Run Code Online (Sandbox Code Playgroud)
但如果path/to/git-mydiff直接执行,退出分页器时就不会报错。
显然,一种解决方案是不使用exec,但为什么这是一个问题呢?为什么只有通过代理命令调用脚本时才会出现问题git?
我正在使用:git 版本 2.5.4 (Apple Git-61)
这将引发 ENOENT 错误:
const cmd = 'bash my/path/to/script.sh';
const process = spawn(cmd);
process.on('exit', (code) => {
console.log("Child exited");
});
Run Code Online (Sandbox Code Playgroud)
虽然这不会并按预期执行脚本:
const cmd = 'bash my/path/to/script.sh';
exec(cmd, function(err, stdout, stderr) {
console.log(stdout);
});
Run Code Online (Sandbox Code Playgroud)
现在,我想获取数据流spawn()并使其正常工作。这种行为可能来自哪里有什么建议吗?
我检查了一下pwd,两者的当前工作目录是相同的。
我用来find列出多个目录中具有特定扩展名的文件。我试过
find /path/to/encompassing/directory/ -d -name "*modified.tif" | xargs cp Destination_Directory/
Run Code Online (Sandbox Code Playgroud)
但没有成功。使用
find /path/ -d -name "*modified.tif" -type f -exec cp {} Destination_Directory \;
Run Code Online (Sandbox Code Playgroud)
有效,但我不明白为什么 xargs 不起作用。
我需要将 Process.exec (不是 Process.run)的输出作为水晶中的字符串获取。这可以做到吗?
我试过了
Process.exec base, args
Run Code Online (Sandbox Code Playgroud)
但它只是将其放入控制台。我想把它放在一个变量中。
下面的代码按照我在 Unix 上的预期工作 - system() 调用会阻塞,直到子进程完成。在 Windows 上,尽管它的工作方式不同 - system() 仅阻塞,直到子脚本到达 exec(),然后它立即返回,并且 exec-ed 子脚本继续在后台运行。有没有办法让它像在 Unix 上一样工作?
# main script
my $myCmd = [$^X, 'myScript.pl', 'arg1', 'arg2'];
system($^X, 'runcmd.pl', @$myCmd);
# runcmd.pl
open(STDOUT, '>', 'out.tmp');
open(STDERR, '>', 'err.tmp');
my $exe = shift @ARGV;
unless(exec($exe, @ARGV))
{
close(STDOUT);
close(STDERR);
exit(1);
}
# myScript.pl - any script that runs few seconds and produces some output, e.g:
foreach (1..5)
{
sleep 1;
print "$_\n";
}
Run Code Online (Sandbox Code Playgroud) 我有一个脚本可以创建具有特定访问权限的用户。
该脚本运行以下命令:
kubectl create serviceaccount username
kubectl create clusterrole readonlyuser --non-resource-url=* --verb=get,list,watch --resource=pods,pods/attach,pods/exec,pods/port-forward,pods/proxy,services/proxy
kubectl create clusterrolebinding username --serviceaccount=default:username --clusterrole=readonlyuser
kubectl create rolebinding username --serviceaccount=default:username --clusterrole=readonlyuser --namespace=namespace
Run Code Online (Sandbox Code Playgroud)
当我尝试执行该特定命名空间中的 pod 时,我得到以下信息:
Error from server (Forbidden): pods "<podname>" is forbidden: User "system:serviceaccount:default:username" cannot create resource "pods/exec" in API group "" in the namespace "namespace"
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我正在概述一个计划。
基本上,我想使用 nftw 遍历目录树并执行任务(myexecutable)。
该函数 nftw 以 (fn) 作为参数,并将其用作回调函数。
现在,我计划在这个回调函数中使用经典的 fork-exec,我已经定义了该回调函数,以便通过将任务分配给不同文件的同一进程的多个实例来获得尽可能快的速度,从而几乎同时发生。
假设我想对每个文件执行操作 P。所以我定义我的回调函数如下:
static int fn(const char* pathname, const struct stat* st, int tf, struct FTW* ff){
if(tf == FTW_F){
if(fork() == 0){
execl("myexecutable", "myexecutable", pathname, NULL);
exit(0);
}else{
return 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
不同的实例也不myexecutable以任何方式相互依赖或共享任何资源。并且它们不需要与父进程通信,反之亦然。
这会导致调用函数出现问题吗?
我是否应该期望 nftw 对此感到疯狂或表现出未定义的行为?
我需要通过Web调用PHP页面来启动Unix进程.我还需要向PHP页面发送一些参数,这些参数以保存的方式替换为命令.
我有一个PHP脚本,它会触发三个exec()命令并获取它们各自的pid.
我想等到所有三个exec命令停止运行,然后再转到下一批三个.
我已经尝试在do while循环中检查每个pid,但它似乎永远不会出现在循环中:它只是坐在那里直到脚本超时.
这是我尝试的简化版本:
do {
$pid = 722;
print "checking";
exec("ps -p $pid", $output);
$count = count($output);
} while ( $count >= 2 );
print "out of do while";
Run Code Online (Sandbox Code Playgroud)
有没有人对什么可能导致它永远不会出现循环有任何想法?