脚本可以在 Mac 上运行,但不能在 Ubuntu 上运行

脚本可以在 Mac 上运行,但不能在 Ubuntu 上运行

该脚本在 Mac 计算机上执行并创建输出文件,但在 Ubuntu 计算机上它会生成错误消息。两个实例均使用 Bash shell:

1 - /var
2 - /etc : 
1
: bad variable name: read: word
first_part(1).sh: 6: first_part(1).sh: Syntax error: newline unexpected (expecting ")")

-

echo "To scan through the directories /var and /etc type 1 or 2: "
echo "1 - /var"
echo "2 - /etc : "
read word
case $word in
         1)
                find /var -type d -follow -ls | awk '{print $3, $5, $6, $11}' > var.txt
                echo "Your file containing /var information has been created."
                ;;
         2)
                find /etc -type d -follow -ls | awk '{print $3, $5, $6, $11}' > etc.txt
                echo "Your file containing /etc information has been created."
                ;;
         *)
                echo "Please insert a valid input"
                continue
                ;;

esac

答案1

如果您使用 执行该文件sh filename.sh,那么一个问题是,在您的 Ubuntu 系统上,该文件可能不会执行,bash而是会执行其他 shell。在我的 Ubuntu 12.04 系统上,软链接到sh(使用; 参见/bin/sh/bin/dashd“破折号为 /bin/sh”)。

您应该使用bash filename.sh, 或使用 shebang 行并使文件可执行 ( chmod +x filename.sh)。

#!/bin/bash
echo "To scan through the directories /var and /etc type 1 or 2: "
echo "1 - /var"
.
.

将文件从 Mac 移动到 Ubuntu 时要检查的一件事是文件的换行符(使用od -c file_name),如果输出中有 '\r' 字符,但\n您必须进行转换,例如使用:

tr '\r' '\n' < file_name > new_file_name

答案2

另外几个替代方案:

sh filename.sh

source filename.sh

. filename.sh

我每天在 Ubuntu 和 OSX 之间切换几次并共享我的点文件,这似乎对我有用。

仅供参考,对于 OSX 特定的内容,我将其放入其中.bash_profile,然后其中source包含.bashrc两个系统通用的内容。

相关内容