表示 ";"近くの構文エラー(宿題)

表示 ";"近くの構文エラー(宿題)

ファイル名を入力するエイリアスを作成し、ファイルが規則的で読み取り可能であることを確認したら、ファイルをバックアップcp -iフォルダにコピーします。$HOME/Backup

私はUNIXに初めて触れたので、これを完了するのに少し難しいことがあります。これは私のコードです。

alias getname='read filename'

alias vfile='getname; if [ ! -f $filename ]; then echo "Irregular file"; (exit 1); elif [ ! -r $file ]; then echo "Not readable"; (exit 2); fi;'


alias backup='vfile; if [ vfile ]; then cp -i $filename $home/Backup; fi;'

エイリアスをテストしたvfile結果、正しく機能します。発生したエラーは次のとおりです。

-bash: syntax error near unexpected token ';'

最初の操作でこれを実行すると、このエラーが発生し始めました。 ifステートメントの前に実行vfileしないと、最後の実行のファイル名が使用されます。コピーする前にエラーが発生していないことをvfile確認してください。vfile

最初のコマンドを追加する前に、vfile次のエラーが発生します。

cp: cannot create regular file '/Backup/*': No such file or directory

しかし、私のホームフォルダにBackupというディレクトリがあり、その原因が何であるかわかりません。

答え1

エイリアスvfileはで終わり、;エイリアスはbackupで始まりますvfile;。したがって、;2つの連続したsの間にステートメントはなく、これは許可されません。

$ echo ; ;
bash: syntax error near unexpected token `;'

;最後のものを削除してくださいvfile

答え2

2つのエイリアスを使用する代わりに、以前の質問のエイリアスを使用してください。

vfileエイリアスが間違っているとエラーコードが発生するため、次のようにできます。

alias filebackup='vfile && cp -i "$filename" "$HOME/Backup/"'

終了時にのみ&&コマンドを実行するように指示します。cpvfile0

編集する すみません。

$homeは有効な環境変数ではないため、どこかに手動で設定しない限り、「該当するファイルまたはディレクトリなし」エラーが発生する理由を説明するには、''常に変数を参照してください。

関連情報