我试图通过SSH在这里的文档中运行一个命令: ssh example.com <<END sudo /etc/init.d/apache2 reload END 除了当我试图运行一些需要input的东西,比如sudo的密码,这通常是正常的。 在这种情况下,我收到以下消息: sudo: no tty present and no askpass program specified 我知道我可以在SSH上使用-t标志来分配一个伪tty,例如: ssh -t example.com "sudo /etc/init.d/apache2 reload" 它会工作,但是当我用这里的文档尝试同样的事情,它不起作用,我会得到同样的错误关于没有tty存在: ssh -t example.com <<END sudo /etc/init.d/apache2 reload END 任何想法如何我可以使这项工作? 此外,如果您想知道为什么我希望它与这里的文档工作,而不是只是在同一行上传递它,这是因为input命令(可以有一些)来自脚本读取的configuration文件我听说它避免了转义引号,双引号等命令的麻烦。
我想用另一个用户,使用expect,然后以该用户身份运行一个graphics程序。 我正在使用kcalc来testing: #!/usr/bin/expect set timeout 20 spawn su dummy expect "Password:" send "PASS\r"; send "kcalc\r" 我也尝试删除最后一行,并将su改为“su dummy -c kcalc”,但这也不起作用。 我感谢任何帮助。
我正在写一个bash脚本来备份我的数据库。 大部分是postgresql,在postgres中有一种方法可以避免通过创build包含postgres密码的〜/ .pgpass文件来进行身份validation。 我把它放在root的主目录下,并将其设置为chmod 0600,这样root就可以转储postgres数据库而无需进行身份validation。 现在我想为mysql做类似的事情,虽然我只有一个mysql数据库。 我怎样才能做到这一点? 我不想在mysqldump的命令行中指定密码,因为这是其他用户可能会看到的脚本的一部分。 有没有更好的办法(即内置到MySQL)做这个比只有root可以读取,然后阅读获取mysql密码,然后在bash脚本中使用它作为一个variables?
我正在写一个LSB初始化脚本(无可否认,我从来没有从头开始)启动一个PHP脚本,守护自己。 PHP脚本开始如下所示: #!/usr/bin/env php <?php /* do some stuff */ 然后在init脚本中这样启动: # first line is args to start-stop-daemon, second line is args to php-script start-stop-daemon –start –exec /path/to/executable/php-script.php \ — –daemon –pid-file=$PIDFILE –other-php-script-args –daemon标志会导致php脚本作为一个守护进程自行分离和运行,而不是依靠start-stop-daemon来分离它。 这是如何(试图)停止在init脚本中: start-stop-daemon –stop –oknodo –exec /path/to/executable/php-script.php \ –pidfile $PIDFILE 问题是,当我试图停止通过初始化脚本,它给了我这个: $ sudo /etc/init.d/my-lsb-init-script stop * Stopping My Project No /path/to/executable/php-script.php found […]
Bash 4.1能够将历史logginglogging到syslog中。 但是,我似乎无法使其在FreeBSD 8下工作。 我已经尝试使用-DWITH_SYSLOG=重新编译端口的bash,但无济于事。 有没有人设法让日志在FreeBSD下工作? 如何Linux?
如何在执行文件操作时排除文件夹,例如cp等 我目前使用通配符*来应用文件操作,但是我需要排除一个文件夹。 我实际上想要使用的命令是更改目录中的所有文件的所有者,但我需要排除一个子目录。
我不小心删除了我的.bashrc。 我仍然有terminal运行。 我可以恢复哪些设置? 我已经有别名(来自alias命令)。 我假设所有的if和case都不见了,但是我想检索这些variables。 我怎样才能做到这一点? (除了必须input)。 还有什么我可以恢复?
有没有一种方法可以在Linux上configurationbash(red hat和ubuntu)以允许使用UTF-8对shell脚本进行编码? 我找不到一个简单的方法来改变一个小东西 ,让整个系统只使用UTF-8文件,而不必担心编码。
当使用SSH将rsync连接到远程服务器时,如何在远程path中转义空格等? 一个简单的反斜杠转义本地bash提示符的空间,但在远程计算机上,空间被读取为path中断,从而标记该path的结束。 所以当我做rsync -avz /path/to/source/some\ dir/ [email protected]:/path/to/dest/some\ dir/会发生什么情况是远程服务器正在读取/path/to/dest/some/ ,因为它不能远程find目的地,因为实际的目的地是“一些目录”而不是“一些”。 如果我尝试使用相同的命令,并且使用反斜杠和空格来避开本地bash提示符并保留远程服务器的反斜杠(总共三个反斜杠: /path/to/dest/some\\\ dir/ ),的确将反斜杠发送到远程服务器,但是远程服务器然后将该path解释为/path/to/dest/some\/而不是/path/to/dest/some\ dir/仍然将空间和字符。 如果我试图用引号包装path,它的行为几乎是一样的,有效地切断了在这个空间的path。 所以它也只能通过本地bash提示符。 最初我使用的path中有一个“ – ”(空格连字符空格)段,远程服务器rsync: on remote machine: -: unknown option返回一个错误rsync: on remote machine: -: unknown option ,这是启动整个空间的原因 – 转义努力摆在首位。 那么我必须做什么才能使远程服务器正常工作,而不必从远程path中删除空格或连字符等其他错误字符?
在我的具体情况下,我想用它来转储我的echo 。 我不想涉及任何文件… 有没有办法使objdump从标准input读取?