Bash 带有多个单词的start命令上的Shairport
我正在尝试设置Shairport,以便在用户连接时运行脚本,在用户再次断开连接时运行另一个脚本 我尝试添加on start和on stop参数。手动启动Shairport时,此功能工作正常 但是我不知道如何在/etc/init.d/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-
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。我将在一秒钟内展开我的答案,以便它变得清晰!