该脚本在 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/dash
d
“破折号为 /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
两个系统通用的内容。