有没有什么Bash
家当客观上比其他大多数应用更好?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
我很清楚地回忆起很久以前的一次听说,在最后添加一个破折号可以防止有人将命令传递给你的脚本,但却无法找到任何细节.
什么是POSIX?我已阅读维基百科的文章,每次遇到这个词时我都会阅读它.事实是,我从来没有真正理解它是什么.
任何人都可以通过解释"对POSIX的需求"向我解释一下吗?
在我的本地机器上,我运行一个包含这一行的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)引起)但在该错误之前它在终端中打印命令.然后我只是复制了那个输出并在终端上做了一个复制粘贴,然后点击回车就可以了......
有没有人知道发生了什么?
我正在阅读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)
有什么不同?
我正试图让cron调用正确的PATH.当我从shell运行Python脚本时,脚本运行正常,因为它使用了bashrc中设置的PATH,但是当我使用cron时,所有的PATH都没有在bashrc中使用.有没有一个文件我可以输入PATHs为cron像bashrc或从bashrc调用PATHs的方法?
对不起我不认为我说的正确,我可以得到正确的脚本运行(意味着crontab中脚本的PATH不是问题),只是当脚本运行时我运行一个构建,这使用了PATHs设置.bashrc
.当我登录时运行脚本时,.bashrc
PATH会被拉入.由于cron不会在shell中运行,因为它不会拉入.bashrc
.有没有办法在不必编写bash脚本包装的情况下将其拉入?
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) 我有以下的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]但没有任何效果.有人能指出我正确的方向吗?
我正在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)
我真的不明白:
\r\n
用\n
(以防\r
造成了问题),但它改变不了什么.dirname
指令),或者它可能不知道cd …
我有一行代码可以在我的终端中正常工作:
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 ×8
linux ×3
sh ×2
shell ×2
unix ×2
compare ×1
comparison ×1
cron ×1
if-statement ×1
path ×1
posix ×1
python ×1
shebang ×1
string ×1
substitution ×1
terminal ×1
terminology ×1