标签: exec

在不复制环境变量的情况下切换到另一个 shell

从 tcsh,如果我尝试:

exec /home/path/to/my/zsh
Run Code Online (Sandbox Code Playgroud)

它有效(我输入了 Zsh shell)

但如果我尝试

exec -c /home/path/to/my/zsh
Run Code Online (Sandbox Code Playgroud)

我得到:

-c Command not found
Run Code Online (Sandbox Code Playgroud)

如何切换到我的 Zsh shell 并从“空白石板”启动它?(即没有从 结转的环境变量tcsh)。

zsh exec

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

找 。* -exec ll {} \; -> 只有一个结果而不是四个

我想使用 find 命令搜索一个目录中的所有文件:

find . * -exec ll {} \;

结果显示每个文件有四个 (!) 结果:

  • file123
  • ./test/file123
  • file123
  • test/file123

是否可以./test/file123使用 find-out-of-the-box-command仅显示第二个结果(因此不使用诸如 之类的东西| grep '^\./')?

我正在使用最新版本的 HP/UX。

find hp-ux exec

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

"No such file or directory" as error for wrong architecture

我正在尝试在我的 64 位 Ubuntu 上运行交叉编译器。并导致以下错误:

$ ./arm-none-eabi-gcc
bash: ./arm-none-eabi-gcc: No such file or directory
Run Code Online (Sandbox Code Playgroud)

该文件在这里并包含一些数据:

$ ls -la arm-none-eabi-gcc
-rwxr-xr-x 2 alan alan 776368 Sep 26 19:36 arm-none-eabi-gcc
$ head -n 1 arm-none-eabi-gcc
ELF?4?
         4  (44?4?  TT?T???|?
Run Code Online (Sandbox Code Playgroud)

ldd 显示不需要依赖项:

$ ldd arm-none-eabi-gcc
not a dynamic executable
Run Code Online (Sandbox Code Playgroud)

strace 也没有提供额外的信息:

$ strace ./arm-none-eabi-gcc
execve("./arm-none-eabi-gcc", ["./arm-none-eabi-gcc"], [/* 80 vars */]) = -1 ENOENT (No such file or directory)
write(2, "strace: exec: No such file or di"..., 40strace: exec: No such file …
Run Code Online (Sandbox Code Playgroud)

linux executable 32bit binary exec

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

用 execl() 替换当前 shell

在以下 C 程序中:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int     main(void){
        char *shell = getenv("SHELL");
        execl(shell, NULL, NULL);
        perror("execl() failed");
}
Run Code Online (Sandbox Code Playgroud)

当我运行上面的代码时,我发现自己在一个新的 shell 中。当我输入exit新的 shell 时,我发现自己又回到了旧的 shell 中。

不应该execl()用一个新的 shell 替换当前的 shell(而不是在旧的 shell 中生成一个新的 shell)?

(Linux 4.16)

shell c exec

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

find - exec 用美元删除目录

具有美元名称的 Maven 本地存储库目录中 - 未解析的属性?我已经概述了我是如何得到几十个文件名中带有美元符号的目录的。

我试图用以下命令摆脱这些:

find . -type d -name "*\$*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

它为每个目录提供了一条错误消息。但是目录和它们的内容从来没有少过。

所以我重试了/tmp

mkdir "\$adir"
find . -type d -name "*\$*" -exec rm -rf {} \;
Run Code Online (Sandbox Code Playgroud)

并再次出错

find: ./$adir: No such file or directory
Run Code Online (Sandbox Code Playgroud)

如何在没有这样警告的情况下删除文件?

find exec

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

bash 循环中的 exec 命令用于网页抓取

这是一个简单的脚本,它卷曲https://unix.stackexchange.com/并将结果存储到一个数组中,它工作正常。

#!/usr/local/bin/bash
[ -f pgtoscrap ] && { rm pgtoscrap; };
curl -o pgtoscrap https://unix.stackexchange.com/;
declare -a arr;
fileName="pgtoscrap";

exec 10<&0
exec < $fileName
let count=0
while read LINE; do
    arr[$count]=$LINE
    ((count++))
done
exec 0<10 10<&-
Run Code Online (Sandbox Code Playgroud)

但是,每次我运行这个脚本时;我收到错误的文件描述符的一些错误。

./shcrap
./shcrap: line 14: 10: No such file or directory
Run Code Online (Sandbox Code Playgroud)

我想我不太明白如何exec在循环中正确使用命令。有人可以解释一下吗?

-- 在mapfile为 Bash 4实现之后更新它变得更简单 --

#!/usr/local/bin/bash
## Pass a parameter as e.g. ./linkscrapping.bash https://unix.stackexchange.com/
mapfile -t arr < <(curl -s $1); ## Doing exec stuff with …
Run Code Online (Sandbox Code Playgroud)

bash shell-script file-descriptors regular-expression exec

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

打印当前目录中不包含.git的所有子目录

我正在尝试编写一个 bash 行,它将查看当前文件夹中的所有子目录,并告诉我是否有不包含“.git”的子目录。伪:

for subdir in currentdir
  if .git does not exist
    print subdir
Run Code Online (Sandbox Code Playgroud)

这是我正在尝试的单行代码,它不起作用并且似乎打印了所有子目录:

find . -maxdepth 1 -type d -execdir $SHELL -c '[ ! -d ".git" ] && echo "not git repo:" {}' $SHELL -c '{}' ';'
Run Code Online (Sandbox Code Playgroud)

我找到了一些解决方案,可以让我打印所有具有 .git 的子目录,就像这个- 我正在尝试做相反的事情。

我究竟做错了什么?这可能吗?

bash find git test exec

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

exec 命令不接受 xargs,挂起命令输入

我不是很熟悉exec。我正在运行一些测试和示例。我想将写入文件的命令传递给它。我期望该命令的运行方式exec就像直接在命令行上运行一样。这是我设置并尝试过的:

[kellyry@ch12ldvela00 ~]$ cat exec_test
ls
[kellyry@ch12ldvela00 ~]$ cat exec_test | exec
[kellyry@ch12ldvela00 ~]$ cat exec_test | xargs exec
xargs: exec: No such file or directory
[kellyry@ch12ldvela00 ~]$ exec ls
exec_test            file2             file3
. . .          
Run Code Online (Sandbox Code Playgroud)

这是最奇怪的部分。运行最后一行exec ls不会返回。那是终端挂起,我无法与其通信。我认为最后一个问题可能是 Mobaxterm 的问题,我用它来 ssh 到服务器。

exec

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

是否可以从 shell 重新创建父级?

这个问题与如何“正确地”从 shell 启动应用程序密切相关,但试图解决更具体的问题。如何从 shell 生成应用程序,从而使其成为另一个进程的子进程。这是我的意思,以两个图形为例:

systemd-+-acpid
        |-bash---chromium-+-chrome-sandbox---chromium-+-chrome-sandbox---nacl_helper
        |                 |                           `-chromium---5*[chromium-+-{Chrome_ChildIOT}]
        |                 |                                                    |-{Compositor}]
        |                 |                                                    |-{HTMLParserThrea}]
        |                 |                                                    |-{OptimizingCompi}]
        |                 |                                                    `-3*[{v8:SweeperThrea}]]
        |                 |-chromium
        |                 |-chromium-+-chromium
        |                 |          |-{Chrome_ChildIOT}
        |                 |          `-{Watchdog}
        |                 |-{AudioThread}
        |                 |-3*[{BrowserBlocking}]
        |                 |-{BrowserWatchdog}
        |                 |-5*[{CachePoolWorker}]
        |                 |-{Chrome_CacheThr}
        |                 |-{Chrome_DBThread}
        |                 |-{Chrome_FileThre}
        |                 |-{Chrome_FileUser}
        |                 |-{Chrome_HistoryT}
        |                 |-{Chrome_IOThread}
        |                 |-{Chrome_ProcessL}
        |                 |-{Chrome_SafeBrow}
        |                 |-{CrShutdownDetec}
        |                 |-{IndexedDB}
        |                 |-{LevelDBEnv}
        |                 |-{NSS SSL ThreadW}
        |                 |-{NetworkChangeNo}
        |                 |-2*[{Proxy resolver}]
        |                 |-{WorkerPool/1201}
        |                 |-{WorkerPool/2059}
        |                 |-{WorkerPool/2579}
        | …
Run Code Online (Sandbox Code Playgroud)

process exec namespace

0
推荐指数
2
解决办法
5614
查看次数

如何将 grep 结果传递给变量,以便我可以将它与 exec tar 命令一起使用?

我试图根据一些正则表达式压缩目录中的所有文件夹,所以我使用 grep 过滤掉输出,现在我需要使用 tar 和文件夹名称。

例如我想 .tar.gz 每个顶级目录到它自己的存档。目录名称必须以“web_”开头,不能以“.tar.gz”结尾。

如何将 grep 输出捕获到变量,使其看起来像这样:

find . -maxdepth 1 -mindepth 1 -type d -print | grep -v \.tar\.gz$ | grep ^\./web_ | exec tar -czf $name.tar.gz $name
Run Code Online (Sandbox Code Playgroud)

或使用 ls -h

ls -h | grep -v \.tar\.gz$ | grep ^web_ | exec tar -czf $name.tar.gz $name
Run Code Online (Sandbox Code Playgroud)

选择“查找...”:

root@4a94aef49e3a:/home# find . -maxdepth 1 -mindepth 1 -type d -print | grep -v \.tar\.gz$ | grep ^web_
./web_demozip1
./web_demozip2
Run Code Online (Sandbox Code Playgroud)

选择“ls -h”:

root@4a94aef49e3a:/home# ls -h | grep -v \.tar\.gz$ …
Run Code Online (Sandbox Code Playgroud)

grep tar pipe exec

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

`exec env` 与 `env`

两者execenv不要 fork,请参阅以下示例:

docker run --rm -it ubuntu:18.04 sh -c 'exec sleep 1 & ps -Ho pid,ppid,cmd'
Run Code Online (Sandbox Code Playgroud)
  PID  PPID CMD
    1     0 sh -c exec sleep 1 & ps -Ho pid,ppid,cmd
    7     1   sleep 1
    8     1   ps -Ho pid,ppid,cmd
Run Code Online (Sandbox Code Playgroud)
  PID  PPID CMD
    1     0 sh -c exec sleep 1 & ps -Ho pid,ppid,cmd
    7     1   sleep 1
    8     1   ps -Ho pid,ppid,cmd
Run Code Online (Sandbox Code Playgroud)
  PID  PPID CMD
    1     0 sh -c env sleep 1 & ps -Ho pid,ppid,cmd …
Run Code Online (Sandbox Code Playgroud)

ps environment-variables exec

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

“exec”正在退出脚本并且不继续下一步

我们正在尝试捕获 exec 命令的返回代码,但是一旦执行该命令,脚本就会退出,而不会继续执行下一行。

exec /bin/sh -c $command > log.txt
rc=$?
if [ $rc -ne 0 ]; then echo "script failed"; exit 999 ; fi
Run Code Online (Sandbox Code Playgroud)

任何建议如何使“exec”命令执行,然后使下一组行继续

linux bash exec

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

如何将 find exec 命令添加到 bashrc 中?

find . -name "*.mov" -exec bash -c 'ffmpeg -i "{}" -c:v libx264 -crf 20 -pix_fmt yuv420p "${0/.mov}.mp4"' {} \;
Run Code Online (Sandbox Code Playgroud)

当我手动运行它时,上面的命令可以完美运行,但我无法将它放在.bashrc文件中的函数中。接收unexpected end of line错误。

function fff { find . -name "*.mov" -exec bash -c 'ffmpeg -i "{}" -c:v libx264 -crf 20 -pix_fmt yuv420p "${0/.mov}.mp4"' {} \; }
Run Code Online (Sandbox Code Playgroud)

bash find function bashrc exec

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