小编iva*_*eev的帖子

名为“test”的可执行文件在 $PATH 中,但不会运行

我在 $HOME/bin 中有一个文件(在你问之前,是的,它在我的路径中)test我已经确认当我使用文件的完整路径运行它时可以正常执行。但是,当我不以这种方式运行时,我会遇到一个非常奇怪的问题。当我test在终端中运行时,它什么也不做并立即返回。我知道这不是查找文件的问题,原因如下:

  1. 没有错误信息。通常,如果找不到文件或无法执行文件,则会打印出一条消息。

  2. 运行which test仍然返回正确的文件路径。

  3. 可能是最奇怪的 - 脚本在运行时运行良好strace。我试着用strace看看我是否能弄清楚发生了什么,但是当我用 运行它时strace,它按预期工作,有 0 个问题。

bash path executable shell-script strace

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

检测脚本是通过 shebang 运行还是被指定为命令行参数

在 Pyenv 项目中,我们遇到了一个特殊的问题。

我们正在用我们的 Bash 脚本(“shims”)替换python(和python*),这些脚本选择要在运行时运行的 Python 可执行文件。

现在,有些用户希望使用一个特殊的选择逻辑,当一个Python脚本运行的path/to/script.py。问题是,如果脚本作为<python> path/to/script.py!

有没有办法可靠地区分这两种情况?

我找不到任何东西:根据第二种情况下命令行参数的制定方式,在两种情况下都可以执行完全相同的命令行:(
给出的 Bash 脚本不是真正的 shim,只是一个演示示例展示我们的逻辑所见和所做)

$ cat python3 
#!/bin/bash
echo "'$0'"
for a in "$@"; do
  echo "'$a'"
done
# need to do the detection here
exec python3 "$@"

$ cat t.py 
#!/home/vmuser/python3
import sys
print(sys.argv)

$ $PWD/t.py
'/home/vmuser/python3' 
'/home/vmuser/t.py'
['/home/vmuser/t.py']

$ $PWD/python3 $PWD/t.py 
'/home/vmuser/python3'
'/home/vmuser/t.py'
['/home/vmuser/t.py']
Run Code Online (Sandbox Code Playgroud)

由于shebang是Linux内核的一个特性——也许它设置了一些表明这种机制已被使用的指标?


我们曾考虑要求用户在他们希望应用特殊逻辑的 Python 脚本使用特殊的 shebang,但这个想法被证明不受欢迎, …

bash shebang

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

条件表达式的语法与正则表达式的比较

我尝试在我的 Ubuntu 机器上执行下面的代码,但它一直显示“条件表达式中的语法错误”和“'0-9'附近的语法错误”,你能告诉我为什么吗?

while ! [[ $num =~ ^[ 0-9 ] +$ && $num = 0 ]] ; do 
Run Code Online (Sandbox Code Playgroud)

shell bash syntax

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

标签 统计

bash ×3

executable ×1

path ×1

shebang ×1

shell ×1

shell-script ×1

strace ×1

syntax ×1