Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 带有多个单词的start命令上的Shairport_Bash - Fatal编程技术网

Bash 带有多个单词的start命令上的Shairport

Bash 带有多个单词的start命令上的Shairport,bash,Bash,我正在尝试设置Shairport,以便在用户连接时运行脚本,在用户再次断开连接时运行另一个脚本 我尝试添加on start和on stop参数。手动启动Shairport时,此功能工作正常 但是我不知道如何在/etc/init.d/shairport中添加这个参数 我试过: START="python script1.py" STOP="python script2.py" DAEMON_ARGS="--daemon --pidfile $PIDFILE --log $LOGFILE --on-

我正在尝试设置Shairport,以便在用户连接时运行脚本,在用户再次断开连接时运行另一个脚本

我尝试添加on start和on stop参数。手动启动Shairport时,此功能工作正常

但是我不知道如何在/etc/init.d/shairport中添加这个参数

我试过:

START="python script1.py"
STOP="python script2.py"
DAEMON_ARGS="--daemon --pidfile $PIDFILE --log $LOGFILE --on-start=\"$START\" --on-stop \"$STOP\""
但这会导致一条错误消息,上面说:

无效的音频参数:script1.py“

我认为问题在于命令由两个单词组成,但我不知道如何解决问题


您能帮助我吗?

您实际上可以通过执行文件来运行python/python3脚本。只需确保包含hashbang,下面是一个示例:

#! /usr/bin/python

print "hello" 
然后你可以做:

$ chmod u+x script1.py
$ script1.py
hello
但是,只要脚本位于
$PATH
中列出的目录中,请注意python(或者python3,如果您愿意)的路径不一定是
/usr/bin/python
,您可以使用
$which python
轻松找到位置

我知道您通过将执行封装在shell脚本中修复了它,但在我看来,这似乎有点干净

编辑:

关于
路径
变量的更详细说明。

在shell中执行脚本时,shell将在此变量中列出的目录中查找命令/脚本。只要脚本位于其中一个目录中,shell就会知道如何调用脚本(在内部,它将使用./script\u name调用脚本,这也是您调用任何脚本的方式)。示例输出:

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
请注意,上面的输出中也列出了包含python的目录(
/use/bin
),因此您可以将
python
作为命令调用

创建脚本并使其可执行时,您可以使用
$./myscript
调用它,例如,如果它位于
/sbin
中,您可以简单地使用
$myscript
调用它

如何将目录添加到路径

您可以使用一个简单的
$PATH=“$PATH:/PATH/to/new/dir”
命令扩展PATH中的目录列表,但这并不理想,因为每次打开shell时都必须这样做。正确的方法是在.bashrc文件中添加一行(这是一个在每个shell会话开始时执行每一行的文件).注意:如果此文件出现故障,您可能最终无法访问shell,请确保在测试新内容之前对其进行备份

在我看来,最好的方法是创建一个包含所有用户制作脚本的目录(我的名为~/bin)。也就是说,您可以遵循以下准则:

mkdir ~/bin   # create the custom script dir
mv script1.py ~/bin   # move your script to the dir
chmod u+x ~/bin/script1.py   # make file executable
cp ~/.bashrc ~/.bashrc_bak   # backup file (to be safe)
vim +$ ~/.bashrc   # open bashrc file at the last line
现在在vim(或选择的编辑器)中,将这一行添加到文件:
export PATH=$PATH:~/bin
并保存(仅添加这一行永远不会损坏bashrc文件)

您现在可以调用位于~/bin目录中的任何可执行脚本

更好的方法是创建一个新文件.bashrc_custom,并将其包含在原始的./bashrc文件中,但这不是必需的,我相信这会使事情变得更复杂

启动一个新的shell并进行测试,您的输出现在应该如下所示:

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/user/bin
如果是这种情况,并且一切正常,请删除备份
rm-f~/.bashrc_-bak

请注意,您可以使用bashrc调整命令行,也可以设置自定义命令行提示符或插入某些别名。例如,我的命令行包含一些别名:

export PATH=$PATH:~/bin
export WORKBENCH="/home/user/my/current/project"
alias clone="gnome-terminal ."
alias explore="gnome-open ."
alias pdf="gnome-open *.pdf"
alias bashrc="vim +$ ~/.bashrc"
alias wb="cd $WORKBENCH"
alias ff="firefox >/dev/null 2>&1 "

希望这能有所帮助,如果有什么不清楚的地方,可以提问。

我不知道shairpoint,但您是否尝试过使script1.py可执行(在$PATH中列出的目录中)并简单地编写START=“script1.py”“?@ShellFish谢谢你的提示,但我不能像这样启动python脚本。但是你给了我一个想法,将我的脚本实现为一个bash脚本,这很有效。谢谢!哦,这是个好消息。很高兴为您服务!你是对的,这似乎是一个更清晰的观点,我可以启动shell脚本,但到目前为止它还不起作用。也许python会是更简单的方法。我只需将您的命令
script1.py
更改为
/script1.py
,以防其他人遇到此问题。:)如果执行echo$PATH,您将看到由“:”分隔的目录列表。这些是shell将在其中搜索可执行文件的目录。通过调用“$pythonscript.py”,shell将在路径中列出的目录中查找脚本/命令python。我将在一秒钟内展开我的答案,以便它变得清晰!