相关疑难解决方法(0)

什么是首选的Bash shebang?

有没有什么Bash家当客观上比其他大多数应用更好?

  • #!/usr/bin/env bash
  • #!/bin/bash
  • #!/bin/sh
  • #!/bin/sh -
  • 等等

我很清楚地回忆起很久以前的一次听说,在最后添加一个破折号可以防止有人将命令传递给你的脚本,但却无法找到任何细节.

bash shebang

1051
推荐指数
5
解决办法
42万
查看次数

"POSIX"是什么意思?

什么是POSIX?我已阅读维基百科的文章,每次遇到这个词时我都会阅读它.事实是,我从来没有真正理解它是什么.

任何人都可以通过解释"对POSIX的需求"向我解释一下吗?

unix linux posix terminology

822
推荐指数
8
解决办法
29万
查看次数

在Python中运行Bash命令

在我的本地机器上,我运行一个包含这一行的python脚本

bashCommand = "cwm --rdf test.rdf --ntriples > test.nt"
os.system(bashCommand)
Run Code Online (Sandbox Code Playgroud)

这很好用.

然后我在服务器上运行相同的代码,我收到以下错误消息

'import site' failed; use -v for traceback
Traceback (most recent call last):
File "/usr/bin/cwm", line 48, in <module>
from swap import  diag
ImportError: No module named swap
Run Code Online (Sandbox Code Playgroud)

所以我所做的就是插入一个"print bashCommand",它在使用os.system()运行它之前打印我,而不是终端中的命令.

当然,我再次得到错误(由os.system(bashCommand)引起)但在该错误之前它在终端中打印命令.然后我只是复制了那个输出并在终端上做了一个复制粘贴,然后点击回车就可以了......

有没有人知道发生了什么?

python bash

260
推荐指数
8
解决办法
47万
查看次数

Bash中单方括号和双方括号之间的区别

我正在阅读bash示例,if但有些示例是用单个方括号编写的:

if [ -f $param ]
then
  #...
fi
Run Code Online (Sandbox Code Playgroud)

其他双方括号:

if [[ $? -ne 0 ]]
then
    start looking for errors in yourlog
fi
Run Code Online (Sandbox Code Playgroud)

有什么不同?

bash if-statement

142
推荐指数
5
解决办法
5万
查看次数

如何让CRON调用正确的PATH

我正试图让cron调用正确的PATH.当我从shell运行Python脚本时,脚本运行正常,因为它使用了bashrc中设置的PATH,但是当我使用cron时,所有的PATH都没有在bashrc中使用.有没有一个文件我可以输入PATHs为cron像bashrc或从bashrc调用PATHs的方法?

对不起我不认为我说的正确,我可以得到正确的脚本运行(意味着crontab中脚本的PATH不是问题),只是当脚本运行时我运行一个构建,这使用了PATHs设置.bashrc.当我登录时运行脚本时,.bashrcPATH会被拉入.由于cron不会在shell中运行,因为它不会拉入.bashrc.有没有办法在不必编写bash脚本包装的情况下将其拉入?

linux cron path

112
推荐指数
8
解决办法
16万
查看次数

如何在终端中执行bash脚本?

我有一个bash脚本,如:

#!/bin/bash

echo Hello world!
Run Code Online (Sandbox Code Playgroud)

如何在终端中执行此操作?

bash terminal

87
推荐指数
8
解决办法
33万
查看次数

使用`sh`和`source`有什么区别?

sh和之间有什么区别source

source: source filename [arguments]
    Read and execute commands from FILENAME and return.  The pathnames
    in $PATH are used to find the directory containing FILENAME.  If any
    ARGUMENTS are supplied, they become the positional parameters when
    FILENAME is executed.
Run Code Online (Sandbox Code Playgroud)

并为man sh:

NAME
       bash - GNU Bourne-Again SHell

SYNOPSIS
       bash [options] [file]

COPYRIGHT
       Bash is Copyright (C) 1989-2004 by the Free Software Foundation, Inc.

DESCRIPTION
       Bash  is  an sh-compatible command language interpreter that executes commands read …
Run Code Online (Sandbox Code Playgroud)

unix linux bash shell

52
推荐指数
3
解决办法
3万
查看次数

bash字符串与多个正确值进行比较

我有以下的bashscript:

function get_cms {
    echo "input cms name"
    read cms
    cms=${cms,,}
    if [ "$cms" != "wordpress" && "$cms" != "meganto" && "$cms" != "typo3" ]; then
        get_cms
    fi
}
Run Code Online (Sandbox Code Playgroud)

但无论我输入什么(正确和不正确的值),它都不会再次调用该函数,因为我只想允许这3个输入中的1个.我用||尝试过 [var!= value]或[var!= value1]或[var!= value1]但没有任何效果.有人能指出我正确的方向吗?

string bash comparison compare

46
推荐指数
5
解决办法
9万
查看次数

shell脚本是否对编码和行结尾敏感?

我正在Mac上制作NW.js应用程序,并希望通过双击图标以开发模式运行应用程序.第一步,我正在尝试使我的shell脚本工作.

在Windows上使用VSCode(我想获得时间),我run-nw在项目的根目录创建了一个文件,其中包含:

#!/bin/bash

cd "src"
npm install

cd ..
./tools/nwjs-sdk-v0.17.3-osx-x64/nwjs.app/Contents/MacOS/nwjs "src" &
Run Code Online (Sandbox Code Playgroud)

但我得到这个输出:

$ sh ./run-nw

: command not found  
: No such file or directory  
: command not found  
: No such file or directory  

Usage: npm <command>

where <command> is one of:  (snip commands list)

(snip npm help)

npm@3.10.3 /usr/local/lib/node_modules/npm  
: command not found  
: No such file or directory  
: command not found
Run Code Online (Sandbox Code Playgroud)

我真的不明白:

  • 似乎它需要空行作为命令.在我的编辑器(VSCode)我试图替换\r\n\n(以防\r造成了问题),但它改变不了什么.
  • 它似乎找不到文件夹(有或没有dirname指令),或者它可能不知道cd …

bash shell sh

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

当我用sh运行它时,为什么我的bash代码会失败?

我有一行代码可以在我的终端中正常工作:

for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)

然后我在脚本中放入完全相同的代码行myscript.sh:

#!/bin/sh
for i in *.mp4; do echo ffmpeg -i "$i" "${i/.mp4/.mp3}"; done
Run Code Online (Sandbox Code Playgroud)

但是,现在运行时出现错误:

$ sh myscript.sh
myscript.sh: 2: myscript.sh: Bad substitution
Run Code Online (Sandbox Code Playgroud)

基于其他问题,我尝试将shebang更改为#!/bin/bash,但我得到完全相同的错误.为什么我不能运行这个脚本?

bash sh substitution

34
推荐指数
2
解决办法
7万
查看次数