私はCentOS共有サーバー環境とBashを使用しています。
ll "$HOME"/public_html/cron_daily/
インポート:
./
../
-rwxr-xr-x 1 user group 181 Jul 11 11:32 wp_cli.sh*
なぜファイル名の末尾にアスタリスクがあるのかわかりません。追加した記憶がなく、変更しようとすると、次のような結果が表示されます。
[~/public_html]# mv cron_daily/wp_cli.sh* cron_daily/wp_cli.sh
+ mv cron_daily/wp_cli.sh cron_daily/wp_cli.sh
mv: `cron_daily/wp_cli.sh' and `cron_daily/wp_cli.sh' are the same file
このエラーは、私のCpanel cronjobが失敗した理由を示している可能性があります。
ファイルを変更したりCpanel cronコマンドを実行したときに私が何か間違っているのでしょうか?どちらの操作も失敗したようです。
答え1
アスタリスクは実際にはファイル名の一部ではありません。ファイルが実行可能でエイリアスにll
次のフラグが含まれているために表示されます-F
。
- F
各ディレクトリパス名の直後にスラッシュ( '/')を、各実行可能ファイルの後にアスタリスク( '*')を、各シンボリックリンクの後にatシンボル( '@')を表示します。各ディレクトリパス名の後には等号( `=')が続きます。シンボリックリンク)、各ソケットの後にはパーセント記号(「%」)、各空白の後にはパーセント記号(「%」)、各FIFO表現の後には縦棒(「%」)があります。
Kusalanandaが述べたように、このようなcronを使用してディレクトリ内のすべてのスクリプトを繰り返すことはできません。実行部分を使用すると、"$HOME"/public_html/cron_daily/
実行ディレクトリ(.shだけでなく)内のすべてのスクリプトを呼び出すか、次の説明に従って繰り返すことができます。この投稿。
答え2
Jesse_bこの質問はすでに答えられていますが、潜在的な誤解を解決する価値があると思いました。
シェルの文字は、特定の条件下で特別な意味を持ちます。例:|
パイプ、>
リダイレクト、\
エスケープ文字などに使用されます。これらの文字はシェルで文字通り解釈されないため、これを実行するとecho foo>bar
端末foo>bar
に印刷されるのではなくfoo
ファイルにリダイレクトされます。bar
幸いなことに、シェルにはこれらの文字が特別な意味である引用符を失うメカニズムもあります。 POSIXシェルでは3つの引用メカニズムがあります。:
- バックスラッシュ
\
:後続の文字のリテラル値は保持されますが<newline>
。 - 二重引用符
"..."
:`
、$
および文字を除いて、二重引用符内のすべての文字のリテラル値を保持します\
。 - アポストロフィ
'...'
:例外なしで一重引用符内のすべての文字のリテラル値を保持します。
したがって、前の例に従って文字通り印刷するには、foo>bar
次のようにします。
echo foo\>bar
echo "foo>bar"
echo 'foo>bar'
アスタリスクは*
これらの特殊文字の1つです。パターン一致記号そして使用ファイル名拡張子。つまり、次のコマンドはecho *.txt
パターンをパターンと一致するファイルに置き換えます。
あなたの場合はcron_daily/wp_cli.sh*
matchしかないので、2つの同じパラメータを見て、cron_daily/wp_cli.sh
それmv
について文句を言います。ファイルがないので関係ありませんcron_daily/wp_cli.sh*
。ただし、実際のファイルが存在し、パターンcron_daily/wp_cli.sh*
に一致できるファイルが多い場合はmv
失敗します。
次のシナリオを考えてみましょう。
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file*
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
file*
引用符なしで名前を変更しようとすると、次のようになります。
$ mv file* new_file
mv: target 'new_file' is not a directory
これは受け取ったパラメータmv
なので、new_file
ディレクトリが必要なためです。
$ printf '[%s]\n' file* new_file
[file*]
[file1]
[file2]
[file3]
[new_file]
名前を正常に変更するには、file*
パラメータを引用する必要があります。
$ mv 'file*' new_file
$ ls -l
total 0
-rw-rw-r-- 1 user group 0 jul 14 12:00 file1
-rw-rw-r-- 1 user group 0 jul 14 12:00 file2
-rw-rw-r-- 1 user group 0 jul 14 12:00 file3
-rw-rw-r-- 1 user group 0 jul 14 12:00 new_file