我有以下bash腳本爲腳本的每個參數做一些事情參數傳遞一個bash腳本
#! /bin/sh
while (($#)); do
echo $1
shift
done
但不知何故,如果我用命令sudo ./test.sh foo1 foo2
它不會工作啓動。而真正奇怪的是,如果我輸入sudo bash test.sh foo1 foo2
它的作品。有人知道是什麼導致了這種奇怪的行爲?
我有以下bash腳本爲腳本的每個參數做一些事情參數傳遞一個bash腳本
#! /bin/sh
while (($#)); do
echo $1
shift
done
但不知何故,如果我用命令sudo ./test.sh foo1 foo2
它不會工作啓動。而真正奇怪的是,如果我輸入sudo bash test.sh foo1 foo2
它的作品。有人知道是什麼導致了這種奇怪的行爲?
您指定/ bin/sh的爲你的解釋,這可能不是bash的。即使它是bash,當調用/ bin/sh時,bash也會以POSIX模式運行。
(())
命令是bash特有的功能。下面將在任何POSIX兼容的外殼工作:
while [ $# -gt 0 ]; do
echo $1
shift
done
您是否試過#!/ bin/bash而不是sh?
這裏的解釋差異的鏈接: http://www.linuxquestions.org/questions/programming-9/difference-between-bin-bash-and-bin-sh-693231/
這將在任一sh
或bash
工作:
for arg
do
echo "$arg"
done
它確實爲腳本的目的是做同樣的事情,而不破壞的說法名單。
腳本的權限是什麼?第一次嘗試什麼_doesn't工作? – sarnold
如果您正在編寫一個bash腳本,請在開始處輸入'#!/ bin/bash'。如果您正在編寫sh腳本,請勿使用任何bash擴展名。 –
請編輯您的問題以包含當前輸出,預期輸出和任何錯誤消息(完整文本)。根據你的描述,不可能調試。祝你好運。 – shellter