タグ付けされた質問 「shell」

シェルは、Unixのコマンドラインインターフェイスです。シェルにインタラクティブにコマンドを入力するか、スクリプトを記述してタスクを自動化できます。/ bin / shおよび最も互換性のあるシェル(ash、bash、ksh、zshなど)に適用される質問には、このタグを使用します。エラーのあるシェルスクリプトについては、ここに投稿する前にhttp://shellcheck.netで確認してください。


4
垂直カーソル位置を取得する
これは奇妙に聞こえるかもしれませんが、次のようにBashで垂直カーソル位置を設定する方法を知っています。 echo -e "\e[12H" これにより、カーソルが(1から始まる)12行目に移動します。 では、Linux bashを使用してカーソル位置(行番号)を取得するにはどうすればよいですか?この値を変数に格納して、計算できるようにしておくと便利です。 編集: これは私が得るエラーです: $ sh rowcol.sh -en read: 9: Illegal option -d test.sh: 12: Bad substitution
10 shell  terminal 

3
scpを使用してフォルダー内の最新のファイルをダウンロードする方法
scp転送を実行して、特定のディレクトリにある最新の(最新の)ファイルをローカルディレクトリにダウンロードしたいと思います。 このようなもの: ソース:root@rimmer.sk:/home/rimmer/backups/ 目的地:/home/rimmer/backups/ 最新のファイルのみを取得しますが、すべてではありませんbackups。
10 shell  ssh  file-copy 


4
名前付きパイプから標準入力を取得する
私がしようとしていることは、ターミナルウィンドウでpythonを実行し、名前付きパイプからstdinにリダイレクトすることです。次に、別のターミナルで名前付きパイプに書き込み、そのコマンドをpythonで実行します。 ターミナル1: mkfifo p1 python < p1 ターミナル2: echo -n "print \"Hello World\"" > p1 何が起こるか-pythonが印刷Hello Worldして終了します。私がやりたいことは、次のコマンドを実行するためにpythonを実行し続けることです。シェルでこれを行うにはどうすればよいですか?

5
曜日に基づいてIf-Elseクエリを使用するにはどうすればよいですか?
問題:今日が木曜日かどうかを確認し、この状態の結果に基づいてさまざまなアクションを実行する必要があります。私は2つの異なるアプローチを試しました: 曜日名の取得: DAYOFWEEK=$(date +"%a") echo DAYOFWEEK: $DAYOFWEEK if ["$DAYOFWEEK" == "Thu"]; then echo YES else echo NO fi 日番号を取得する: DAYOFWEEK=$(date +"%u") echo DAYOFWEEK: $DAYOFWEEK if ["$DAYOFWEEK" == 4]; then echo YES else echo NO fi どちらの場合も、出力はYESであるべきですが、NOです。なにが問題ですか?

2
時間を比較する良い方法は?
現在の時刻を確認し、実行するはずの適切な時刻でない場合はスクリプトを中止する必要があります。また、他の誰かがそれを実行した場合、中止する必要があります。 例:午後10時から午前2時(4時間のウィンドウ)の間に開始された場合にのみ、スクリプトを実行する必要があります。 現在、私は以下を行っています。時間をかけdate +%k%Mてハードコードされた数値と比較する #!/bin/sh currTime=`date +%k%M` check_time_to_run() { tempTime=$1 if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then echo "Time is between 2 AM and 10 PM. Aborting." exit 1 else echo "Time is after 10 PM and before 2 AM. Running normally." fi } check_time_to_run $currentTime …

2
findコマンドからパイプされたファイル名を操作する
私はBashに比較的慣れていないため、表面上は非常に簡単に思える何かを実行しようとしています。ディレクトリ階層全体でfindを実行して、すべての* .wmaファイルを取得し、その出力をコマンドにパイプして、mp3に変換します。変換したファイルを.mp3として保存します。私の考えは、コマンドは次のようになるはずだと考えていました(オーディオ変換コマンドは省略し、代わりに説明のためにエコーを使用しています)。 $ find ./ -name '*.wma' -type f -print0 | xargs -0 -I f echo ${f%.*}.mp3 私が理解しているように、-print0引数を使用すると、スペースを含むファイル名を処理できます(これらの多くは、音楽ファイルであるので、これを行います)。次に、(xargsの結果として)findからの各ファイルパスがfにキャプチャされ、文字列の最後から部分文字列の一致/削除を使用すると、mp3で元のファイルパスをエコーする必要があることを期待していますwmaの代わりに拡張子。ただし、この結果の代わりに、次のように表示されます。 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 *.mp3 ... だから私の質問(特定の「ここで何が間違っているのか」を除いて)はこれです-パイプ操作の結果である値は、変数割り当ての結果である値とは異なる文字列操作操作で処理する必要があります?

1
孤立したプロセスグループでインタラクティブシェルは何をすべきですか?
(/programming/13718394/what-should-interactive-shells-do-in-orphaned-process-groupsの提案に従ってUNIXに再投稿する) 簡単な質問は、ttyを所有していない孤立したプロセスグループ内にある場合、シェルは何をすべきかということです。しかし、面白いので、長い質問を読むことをお勧めします。 以下は、お気に入りのシェルを使用して、ラップトップをポータブルスペースヒーターに変える楽しくてエキサイティングな方法です(tcshの変人の1人でない限り)。 #include <unistd.h> int main(void) { if (fork() == 0) { execl("/bin/bash", "/bin/bash", NULL); } return 0; } これにより、bashはCPUを100%に固定します。zshとfishは同じことをしますが、kshとtcshはジョブ制御について何かをつぶやいてからキールします。これは少し優れていますが、それほど多くはありません。ああ、それはプラットフォームにとらわれない犯罪者です。OSXとLinuxの両方が影響を受けます。 私の(潜在的に間違っている)説明は次のとおりです:子シェルがそれがフォアグラウンドにないことを検出しました:tcgetpgrp(0) != getpgrp()。したがって、それ自体を停止しようとしますkillpg(getpgrp(), SIGTTIN)。しかし、その親(Cプログラム)がリーダーで死亡したため、そのプロセスグループは孤立SIGTTINしています。孤立したプロセスグループに送信されたものは削除されるだけです(それ以外の場合は、再び起動できません)。したがって、子シェルは停止されませんが、まだバックグラウンドにあるので、すぐにすべてが再び実行されます。すすぎ、繰り返します。 私の質問は、コマンドラインシェルがこのシナリオをどのように検出できるか、そしてそれを行うための正しいことは何ですか?私には2つの解決策がありますが、どちらも理想的ではありません。 pidがグループIDと一致するプロセスにシグナルを送ろうとします。それがで失敗する場合ESRCH、それはおそらく孤立していることを意味します。 から1バイトのノンブロッキング読み取りを試みます/dev/tty。それがで失敗する場合EIO、それはおそらく孤立していることを意味します。 (これを追跡する私たちの問題はhttps://github.com/fish-shell/fish-shell/issues/422です) あなたの考えをありがとう!

1
Apacheによって開かれたままになっている削除されたファイルを回復しますか?
Apacheログファイルが削除されたが、Apacheによって開いたままになっているとします。次に、これは私がやっていることです: pid=$(lsof | grep text.txt | awk '/deleted/ {print $2}') fd=$(lsof | grep text.txt | awk '/deleted/ {print $4}' | grep -oE "[[:digit:]]{1,}") cp /proc/$pid/fd/$fd directorytobecopied/testfile.txt これは私がファイルを回復して元の場所に戻すために行っていることです。上記のコードは見栄えが悪いので、これを行う簡単な方法はありますか?さらに、ファイルが削除された場所(directorytobecopied)からどのようにして知ることができるので、手動でファイルの元の場所を誰かに尋ねて、そこに戻す必要がありません。


1
ESの環境をどのように設定しますか?
私はここ数日、esを使って遊んでいますが、(rcのように.esrc)ログイン時に起動スクリプト()のみを実行するという癖/機能があります。各対話型セッションでコードを実行する通常の方法は、そのコードを%prompt関数に配置することです。 もちろん、一度も実行されていない%prompt場合、機能es -lはありません。 それで、質問:.profile(または.xprofile、.xsessionなど)のみをソースする、gdmまたは同様のものを介して入ってくるときのログイン環境をどのように設定しますか?私が思いついた最高のものは: if [ -f "$HOME/.esrc" ]; then eval "`es -l <<-x sh <<<'export -p' x`" fi それは...恐ろしいようです。より良いアプローチはありますか?

2
特定のファイルの実行可能ビットを自動的に設定する方法
特定のファイルを作成するときに、vimエディターで作成するとします。作成されたファイルは、作成時に実行可能権限も取得する必要があります。私はいくつかのpythonファイルを作成していて、ファイルのアクセス許可を明示的に設定したくないので、特定の拡張子または特定のエディターでファイルを作成するとすぐに実行可能ビットが設定されるようにしたいので、これが必要です。
10 shell  vim  editors 

3
EOFを使用せずにbashスクリプトからのテキスト入力を自動化する
Ubuntu Linuxを実行しています。というプログラムがあるとしmyprogramます。このプログラムは、ユーザーに入力を求めます。具体的には、ユーザーはプロンプトが表示されたら整数を入力してを押す必要がありEnterます。bashスクリプトを使用してこのプロセスを自動化したいと思います。特に、myprogram例えばを100回実行したいとします(iから1に移動するカウンターを使用100)。を実行するたびmyprogramにi、プロンプトが表示されたらの現在の値を入力します。 (ちなみに、myprogramオプション/スイッチを取ります。これら-optionsはすべて定数なので、bashスクリプト内で指定されます。) このbashスクリプトの不完全なスケルトンは次のようになります。 #!/bin/bash for i in {1..100} do myprogram -options done 次に、上記のコードを変更iして、プログラムによってプロンプトが表示されたときにの現在の値が入力されるようにします。これを行う最良の方法は何ですか? 私が使用しているソフトウェアのWebサイトでは<<EOF、最後に使用することをお勧めしていmyprogram -optionsます。これは、入力が使用するために「ファイルの終わり」を調べるようにbashに指示すると思います。しかし、入力をファイルの最後に配置したくない場合はどうなりますか?<<またはの直後に配置したい場合はどうなり<ますか? その理由は、物事がより複雑になるからです。たとえばj、いくつかの非線形、非順次的な方法で変化する整数カウンターを紹介します。私は、その後の現在値送りたいと思うjのmyprogram各反復上に、しかし、の値がjへの呼び出しの間で変更される可能性がありmyprogram -options、ファイルの末尾EOF。 何か提案はありますか?

3
どうすれば前/次の兄弟ディレクトリにcdできますか?
私はよくこのようなプロジェクトディレクトリのレイアウトを持っています project `-- component-a | `-- files... `-- component-b | `-- files... `-- component-c `-- files... componentファイルがある場所だから、私は通常、ディレクトリの1つで作業します。その後シェルに戻ると、特にすべてのコンポーネントにスクリプトを使用できない変更をいくつか加える必要がある場合は、兄弟ディレクトリに移動する必要があることがよくあります。それらの場合、私は前の兄弟ディレクトリーが何であるか、または次の兄弟ディレクトリーが何であるかさえ気にしません。 私は、コマンドを定義することができるprevか、nextそれは単に意志cd私(アルファベットまたは何によって)前のディレクトリ、または次のディレクトリに?cd ../com<TAB><Arrow keys>いつもタイピングは少し古くなっているからです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.