我有一个使用sudo了几次的 bash 脚本。不过,它有一些奇怪的地方。
这是脚本的相关部分。
sudo service apache2 stop
drush sql-dump --root="$SITE_DIR" --structure-tables-key=svn --ordered-dump | grep -iv 'dump completed on' | sudo tee "$DB_DIR/${SITE_NAME}.sql" > /dev/null
sudo svn diff "$DB_DIR" | less
sudo svn commit -m "$MESSAGE" "$DB_DIR"
sudo service apache2 start
Run Code Online (Sandbox Code Playgroud)
第一个密码是停止apache,它按预期工作。如前所述,sudo tee它不“记得”我有提升的权限,再次要求输入密码,然后将其回显到屏幕上。鉴于这完全tee是关于回显到屏幕,我已经使用了一些简单的脚本,这些脚本具有| sudo tee,并且它们都按预期工作。
编辑:
我查看了drush命令本身,它是一个 bash 文件,它使用exec. 这听起来可能有潜力 - 有什么想法吗?这是来自drush.
exec php $SCRIPT_PATH --php=`which php` "$@"
Run Code Online (Sandbox Code Playgroud)
Edit2: 正在查找与 Ruby 脚本有关的内容,并 …
有没有办法在 Bash 提示 ( $PS1) 中隐藏一些信息,例如使用 ANSI 转义序列的“不可见颜色”之类的东西。
方法应该是通用的。它不应使用某些罕见终端类型的特殊隐身功能。隐藏的数据也应该隐藏在例如纯 Linux 控制台 ( $TERM == linux) 中。
我是 bash 新手,正在编写一个 bash 脚本,允许在两台计算机之间传输文件。顺便说一句,有没有比 scp 更安全的替代品?
目前,我正在使用 scp 手动执行此操作。远程服务器总是提示我输入密码,我提供。我想自动化这个(因此是 bash 脚本)。但是,我不想以纯文本形式提供我的密码(或者如果有的话 - 我的印象是开放 SSL 会取消密码并使用证书等?)。
任何人都可以解释我如何在不显式显示我的密码的情况下自动化我当前的过程。
我在 Ubuntu 10.0.4 上运行
, 在 bash 中是什么意思?例如,“accurev update -9 2>,update 1>&2”中的 , 是什么意思?(accurev是一个版本控制软件)
抱歉这个蹩脚的问题,我只是不知道如何用谷歌搜索特殊字符。
我想为同一个命令创建两个不同的别名而不重复我自己。我怎样才能在 bash 中做到这一点?例如,我希望 listlong 和 longlist 都是“ls -al”的别名。
我需要在我的 bash 脚本中检查用户提供的选项,但在调用脚本时并不总是提供这些选项。例如,可能的选项可以是 -dontbuild -donttest -dontupdate 的任意组合,有没有办法检查它们?对不起,如果这个问题真的很基础,我是 bash 脚本的新手。
谢谢
编辑:我尝试了这段代码,并使用选项 -disableVenusBld 调用了脚本,但它仍然打印出“开始构建”。难道我做错了什么?提前致谢!
while [ $# -ne 0 ]
do
arg="$1"
case "$arg" in
-disableVenusBld)
disableVenusBld=true
;;
-disableCopperBld)
disableCopperBld=true
;;
-disableTest)
disableTest=true
;;
-disableUpdate)
disableUpdate=true
;;
*)
nothing="true"
;;
esac
shift
done
if [ "$disableVenusBld" != true ]; then
echo "Starting build"
fi
Run Code Online (Sandbox Code Playgroud) 在 bash 中,我可以通过执行以下操作来启动命名屏幕
screen -S test
Run Code Online (Sandbox Code Playgroud)
如果我输入
ctrl-a A new_screen_name
Run Code Online (Sandbox Code Playgroud)
它只会改变屏幕的标题。当我做一个
screen -r
Run Code Online (Sandbox Code Playgroud)
我看到会话名称仍然相同。
我在 OS X Snow Leopard 笔记本电脑上的终端中运行以下命令:
rm -rf /path/to/directory
Run Code Online (Sandbox Code Playgroud)
通常,这会删除目录和所有内容/子目录。但是,出于某种原因,它现在给出了以下错误消息:
rm: –rf: No such file or directory
rm: /path/to/directory: is a directory
Run Code Online (Sandbox Code Playgroud)
如果有人可以分享为什么 rm 不将“-rf”识别为选项字符串,我将不胜感激?
嘿,我有一个很大的目录树。我想找出所有包含文件的目录,文件名以“.ext1”结尾,文件名以“.ext2”结尾。
这怎么可能?我想过使用两个查找,一个用于“.ext1”,一个用于“.ext2”,但后来我需要找到交集,这怎么做?
谢谢!
我运行了这个代码:
sudo cat <<EOF | sudo sed -e "s,%,$,g" >/etc/init.d/dropbox
echo "Hello World"
EOF
Run Code Online (Sandbox Code Playgroud)
但是即使我得到“权限被拒绝”,因为您必须是 root 才能在 /etc/init.d 目录中进行更改。不知何故,我上面的命令不起作用。
有没有办法解决这个问题?
bash ×10
linux ×4
unix ×3
shell-script ×2
ubuntu ×2
bash-alias ×1
command-line ×1
debian ×1
find ×1
gnu-screen ×1
mac ×1
scp ×1
script ×1
session ×1
shell ×1
sudo ×1